我用我在运行时创建的QVBoxLayout
个对象动态填充QWidget
。我想在运行时删除它们,但是如何?
我可以逐个删除小部件:
void QLayout::removeWidget(QWidget * widget)
我可以以某种方式遍历布局吗?
答案 0 :(得分:4)
所有道路都通往罗马;)
Qt documentation of QLayout::takeAt
州:
以下代码片段显示了从中删除所有项目的安全方法 布局:
QLayoutItem *child; while ((child = layout->takeAt(0)) != 0) { ... delete child; }
要删除托管窗口小部件,您只需添加一行:
QLayoutItem *child;
while ((child = layout->takeAt(0)) != 0) {
...
delete child->widget();
delete child;
}
答案 1 :(得分:2)
有count
方法返回存储小部件的数量,以及itemAt()
方法,给定索引,它返回指向相对存储小部件的指针。您可以检索所有指针,然后将其删除。您应该首先检索所有指针,因为如果在计数时删除一个指针,那么在迭代期间存储的小部件的数量会发生变化。
itemAt()
使用QLayoutItem
方法检索widget
,以检索小部件本身。
while (layout->count() != 0) {
QLayoutItem *item = layout->itemAt(0);
layout->removeWidget(item->widget());
}