我将小部件添加到布局,然后将此布局作为一行添加到另一个布局:
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。
答案 0 :(得分:0)
来自Qt文档:
[pure virtual] QLayoutItem * QLayout::takeAt(int index)
必须在子类中实现,才能从布局中删除索引处的布局项,并返回该项。如果没有这样的项目,则该函数必须不执行任何操作并返回0.项目从0开始连续编号。如果项目被删除,则其他项目将重新编号。
以下代码片段显示了从布局中删除所有项目的安全方法:
QLayoutItem *child;
while ((child = layout->takeAt(0)) != 0) {
...
delete child;
}
希望有所帮助。