我想在布局上动态创建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);
}
但是,我的代码不会删除项目,它会在旧版本的顶部创建一个新的布局(看起来像这样):
如何解决这个问题?
答案 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
)。