0

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

我可以一一删除小部件:

void QLayout::removeWidget(QWidget * widget)

我可以以某种方式迭代布局吗?

4

2 回答 2

6

条条大路通罗马 ;)

状态的Qt 文档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;
}
于 2015-09-01T14:45:32.550 回答
2

有一种count方法可以返回存储的小部件的数量,还有一种itemAt()方法可以在给定索引的情况下返回指向相对存储的小部件的指针。您可以检索所有指针,然后将其删除。您应该首先检索所有指针,因为如果您在计数时删除一个,那么存储的小部件的数量会在迭代期间发生变化。

itemAt()QLayoutItem使用检索小部件本身的widget方法检索 a 。

while (layout->count() != 0) {
  QLayoutItem *item = layout->itemAt(0);
  layout->removeWidget(item->widget());
}
于 2015-09-01T14:20:30.243 回答