如何从布局中删除多行?

  • 本文关键字:删除 布局 c++ qt qt5
  • 更新时间 :
  • 英文 :


我将小部件添加到布局中,然后将此布局作为行添加到另一个布局中:

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;
}

希望对您有所帮助。

相关内容

  • 没有找到相关文章

最新更新