在QSpin上单击动态创建布局上的项目 - 删除不会删除项目

时间:2015-11-14 17:13:31

标签: qt layout

我想在布局上动态创建X标签。 X取自QSpinBox。

当X减少时,我需要首先删除布局上的项目,然后创建一个新项目,标签数量减少:

void dial::quantity1SpinClicked(int val)
{
    QLayout *layout = fqbox->layout();
    if(layout != 0)
    {
        QLayoutItem *item;
        while ((item = layout->takeAt(0)) != 0)
            layout->removeItem (item);
        delete layout;
    }

    QGridLayout *gridLayout = new QGridLayout;

    QList<QLabel*> labels;

    for (int i = 0; i < val; ++i){
        labels << new QLabel(QObject::tr("nr %1").arg(i));
        gridLayout->addWidget(labels.at(i), i, 0);
    }

    fqbox->setLayout(gridLayout);
}

但是,我的代码不会删除项目,它会在旧版本的顶部创建一个新的布局(看起来像这样):

enter image description here

如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

需要删除QLabel小部件:

    QLayoutItem *item;
    while ((item = layout->takeAt(0)) != 0) {
        layout->removeItem (item);
        delete item->widget();
        delete item;
    }

还请注意QLayout::removeItem(QLayoutItem * item)

的说明
  

删除该项目是调用者的责任。

     

请注意,item可以是布局(因为QLayout继承   QLayoutItem)。