删除QHBoxLayout上的小部件时出现问题。 我使用QList列出我的布局,因为我在运行时添加了布局。 这是我的QList
QList<QHBoxLayout*> hBoxLayoutParent;
这是我添加小部件时的代码
hBoxLayoutParent.push_back(createNewHBoxParent());
hBoxLayoutParent.last()->addWidget(label);
hBoxLayoutParent.last()->addWidget(cmbBox);
hBoxLayoutParent.last()->addWidget(cmbJurusan);
hBoxLayoutParent.last()->addWidget(listButton.last());
ui->formLayout_2->addLayout(hBoxLayoutParent.last());
这就是我删除它们的方式
for(int i = 0; i < hBoxLayoutParent[index]->count(); i++)
{
delete hBoxLayoutParent[index]->takeAt(0)->widget();
qDebug() << "Widget Number: " << hBoxLayoutParent[index]->count();
}
hBoxLayoutParent.removeAt(index);
当我单击“删除”按钮时,并未全部删除。
cmbJurusan
仍然存在。
答案 0 :(得分:2)
问题在于您的for
循环并没有完全按照您的想法计算。你有...
for (int i = 0; i < hBoxLayoutParent[index]->count(); i++)
因此,您每次迭代都会增加i
。但是...
delete hBoxLayoutParent[index]->takeAt(0)->widget();
将从hBoxLayoutParent[index]
中删除一个项目。因此,您正在修改要对其对象进行迭代的QHBoxLayout
-每次迭代使i
增加1,但布局中的项目数也减少1。
相反,请尝试...
while (!hBoxLayoutParent[index]->isEmpty()) {
delete hBoxLayoutParent[index]->takeAt(0)->widget();
qDebug() << "Widget Number: " << hBoxLayoutParent[index]->count();
}
还请注意,如果此代码在事件循环的上下文中运行,那么您可能想使用QObject::deleteLater
而不是delete
。