我想做一个列表,当用户更改一个旋转框的值时,它会更改它的字段编号。 像这样:
默认情况下前5个字段
然后只有1个字段,例如
如果用户想要再次更改它,他可以再次放置5个字段。
我制作了一个GridLayout和几个QList,一个用于标签,另一个用于LineEdits。我这样做了:
我创建了一个基本案例(只有1个字段),后来我添加了更多关于将小部件添加到GridLayout的执行时间:
gridLayout->addWidget(labels.at(x), 0, 1)
其中label是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)
答案 0 :(得分:0)
布局是小部件几何的处理程序。如果您使用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;
}
}
}
添加:
卸下: