从QLayout中删除QWidgets?

时间:2015-09-01 14:12:38

标签: qt qwidget qt5.4 qlayout qvboxlayout

我用我在运行时创建的QVBoxLayout个对象动态填充QWidget。我想在运行时删除它们,但是如何?

我可以逐个删除小部件:

void QLayout::removeWidget(QWidget * widget)

我可以以某种方式遍历布局吗?

2 个答案:

答案 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());
}