如何从布局中删除多行?

时间:2017-05-17 07:49:02

标签: 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。

1 个答案:

答案 0 :(得分:0)

来自Qt文档:

[pure virtual] QLayoutItem * QLayout::takeAt(int index)

必须在子类中实现,才能从布局中删除索引处的布局项,并返回该项。如果没有这样的项目,则该函数必须不执行任何操作并返回0.项目从0开始连续编号。如果项目被删除,则其他项目将重新编号。

  

以下代码片段显示了从布局中删除所有项目的安全方法:

QLayoutItem *child;
while ((child = layout->takeAt(0)) != 0) {
    ...
    delete child;
}

希望有所帮助。