C++ 如何切换网格布局中的小部件可见性?
我想做一个列表,当用户更改spinbox的值时,它会更改字段编号。 大概是这样的: 默认情况下,前5个字段 例如,只有1个字段 如果用户想再次更改它,他可以再次放置5个字段 我制作了一个GridLayout和两个QList,一个用于标签,另一个用于线条编辑。我这样做: 我创建了一个基本案例(只有一个字段),稍后我通过以下方式添加了更多关于执行时间的内容:向GridLayout添加小部件:C++ 如何切换网格布局中的小部件可见性?,c++,qt,qt5,qgridlayout,C++,Qt,Qt5,Qgridlayout,我想做一个列表,当用户更改spinbox的值时,它会更改字段编号。 大概是这样的: 默认情况下,前5个字段 例如,只有1个字段 如果用户想再次更改它,他可以再次放置5个字段 我制作了一个GridLayout和两个QList,一个用于标签,另一个用于线条编辑。我这样做: 我创建了一个基本案例(只有一个字段),稍后我通过以下方式添加了更多关于执行时间的内容:向GridLayout添加小部件: gridLayout->addWidget(labels.at(x), 0, 1) 其中标签是Q
gridLayout->addWidget(labels.at(x), 0, 1)
其中标签是QList。它可以很好地添加小部件,但我不能删除并再次添加
我试着用
gridLayout->removeWidget(lables.at(x), 0, 1)
labels.at(x)->hide()
label.at(x)->setVisible(false)
所有这些都有效,但我无法再次展示:
gridLayout->addWidget(labels.at(x), 0, 1)
labels.at(x)->show()
label.at(x)->setVisible(true)
布局是小部件几何图形的处理程序。如果使用
removeWidget()
函数,您将只从布局中删除该元素,但它仍然可见。如果您希望它不可见,则必须使用delete
将其删除
在下面的示例中,我向您展示了如何使用QSpinBox的valueChanged
信号添加和删除小部件
void Dialog::on_spinBox_valueChanged(int arg1)
{
int nElements = labels.count();
//add
if(arg1 > nElements){
for(int i=nElements; i < arg1; i++){
QLabel *label = new QLabel(QString::number(i), this);
QLineEdit *line = new QLineEdit(QString::number(i), this);
labels.append(label);
lines.append(line);
ui->gridLayout->addWidget(label, i, 0, 1, 1);
ui->gridLayout->addWidget(line, i, 1, 1, 1);
}
}
//remove
else if(arg1 < nElements){
for(int i=arg1; i < nElements; i++){
QLabel *label = labels.at(i);
QLineEdit *line = lines.at(i);
ui->gridLayout->removeWidget(label);
ui->gridLayout->removeWidget(line);
labels.removeAt(i);
lines.removeAt(i);
delete label;
delete line;
}
}
}
void Dialog::on\u spinBox\u值已更改(int arg1)
{
int neelements=labels.count();
//加
如果(arg1>元素){
对于(int i=n元素;igridLayout->addWidget(标签,i,0,1,1);
ui->gridLayout->addWidget(行,i,1,1,1);
}
}
//除去
else if(arg1<元素){
for(int i=arg1;igridLayout->removeWidget(标签);
ui->gridLayout->removeWidget(行);
标签。移除(i);
行。删除(i);
删除标签;
删除行;
}
}
}
加:
删除:
布局是小部件几何图形的处理程序。如果使用
removeWidget()
函数,您将只从布局中删除该元素,但它仍然可见。如果您希望它不可见,则必须使用delete
将其删除
在下面的示例中,我向您展示了如何使用QSpinBox的valueChanged
信号添加和删除小部件
void Dialog::on_spinBox_valueChanged(int arg1)
{
int nElements = labels.count();
//add
if(arg1 > nElements){
for(int i=nElements; i < arg1; i++){
QLabel *label = new QLabel(QString::number(i), this);
QLineEdit *line = new QLineEdit(QString::number(i), this);
labels.append(label);
lines.append(line);
ui->gridLayout->addWidget(label, i, 0, 1, 1);
ui->gridLayout->addWidget(line, i, 1, 1, 1);
}
}
//remove
else if(arg1 < nElements){
for(int i=arg1; i < nElements; i++){
QLabel *label = labels.at(i);
QLineEdit *line = lines.at(i);
ui->gridLayout->removeWidget(label);
ui->gridLayout->removeWidget(line);
labels.removeAt(i);
lines.removeAt(i);
delete label;
delete line;
}
}
}
void Dialog::on\u spinBox\u值已更改(int arg1)
{
int neelements=labels.count();
//加
如果(arg1>元素){
对于(int i=n元素;igridLayout->addWidget(标签,i,0,1,1);
ui->gridLayout->addWidget(行,i,1,1,1);
}
}
//除去
else if(arg1<元素){
for(int i=arg1;igridLayout->removeWidget(标签);
ui->gridLayout->removeWidget(行);
标签。移除(i);
行。删除(i);
删除标签;
删除行;
}
}
}
加:
删除:
谢谢,它可以工作,但为什么我不能只设置可见(false)和稍后设置可见(true)?假设Qlist有从1到5的预定义值(这是spinbox的范围)。谢谢,它可以工作,但为什么我不能只设置可见(false)和稍后的设置可见(true)?假设Qlist具有从1到5的预定义值(这是spinbox的范围)。