我将小部件添加到布局中,然后将此布局作为行添加到另一个布局中:
lbl = new QLabel(this);
currentResistorText += tr("Resistor") + tr("#") + QString::number(resistorCounter);
lbl->setText(currentResistorText);
newResistorLayout = new QHBoxLayout();
lineEdit = new QLineEdit(this);
newResistorLayout->addWidget(lbl);
newResistorLayout->addWidget(lineEdit);
ui->resistorsLayout->insertRow(fieldCounter, newResistorLayout);
我在插槽中执行此操作,因此可以添加多行。
当我尝试删除一行时,它可以工作。
这是代码:
ui->resistorsLayout->takeRow(ui->resistorLayout->rowCount() - 1);
delete lbl;
delete lineEdit;
delete newResistorLayout;
如果我尝试删除第二行,那么程序就会崩溃。我也尝试使用 removeRow() 方法,但结果是一样的。我做错了什么? 如何删除多行?
我正在使用Qt 5.8。
来自Qt文档:
[pure virtual] QLayoutItem * QLayout::takeAt(int index)
必须在子类中实现,以从布局中删除索引处的布局项,并返回该项。如果没有这样的项目,则该函数必须不执行任何操作并返回 0。项目从 0 开始连续编号。如果删除某个项目,其他项目将重新编号。
以下代码片段显示了从布局中删除所有项的安全方法:
QLayoutItem *child;
while ((child = layout->takeAt(0)) != 0) {
...
delete child;
}
希望对您有所帮助。