【问题标题】:Remove QWidgets from QLayout?从 QLayout 中删除 QWidgets?
【发布时间】:2015-09-01 14:12:37
【问题描述】:

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

我可以一个一个移除小部件:

void QLayout::removeWidget(QWidget * widget)

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

【问题讨论】:

  • 我不明白你的问题是什么。 removeWidget 有什么问题?
  • @Jérôme 我将多个 QWidget 放入该布局中,但我不记得它们。我想全部删除。

标签: qt qwidget qt5.4 qlayout qvboxlayout


【解决方案1】:

条条大路通罗马 ;)

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;
}

【讨论】:

    【解决方案2】:

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

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

    while (layout->count() != 0) {
      QLayoutItem *item = layout->itemAt(0);
      layout->removeWidget(item->widget());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-27
      • 2015-07-14
      • 2012-02-25
      • 1970-01-01
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多