从 QLayout 中删除 QWidgets?
Posted
技术标签:
【中文标题】从 QLayout 中删除 QWidgets?【英文标题】:Remove QWidgets from QLayout? 【发布时间】:2015-09-01 14:12:37 【问题描述】:我用我在运行时创建的QWidget
对象动态填充我的QVBoxLayout
。我也想在运行时删除它们,但是如何删除呢?
我可以一个一个移除小部件:
void QLayout::removeWidget(QWidget * widget)
我可以以某种方式遍历布局吗?
【问题讨论】:
我不明白你的问题是什么。removeWidget
有什么问题?
@Jérôme 我将多个 QWidget 放入该布局中,但我不记得它们。我想全部删除。
【参考方案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());
【讨论】:
以上是关于从 QLayout 中删除 QWidgets?的主要内容,如果未能解决你的问题,请参考以下文章
如何完全删除 QLayout 的边距(特定于 Mac OS)
在 QLayout 中创建和删除自定义 QWidget 时出现 RAM 问题