我正在使用构造函数QWidget(QWidget *parent)
。这个父窗口部件包含很多子窗口部件。我需要在运行时清除父级的所有子级小部件。我怎样才能做到这一点?
之前的答案是错误的!!你不能使用findChildren
删除一个部件的子部件,因为 Qt4 的findChildren
递归地列出儿童。因此,您将删除子项的子项,然后可能会删除两次,从而可能导致您的应用程序崩溃。
更一般地,在 Qt 中,获取以下列表QObject
指针并一一删除它们是危险的,因为由于父所有权机制,或者通过连接一个对象,销毁一个对象可能会连锁销毁其他对象destroyed()
向a发出信号deleteLater()
投币口。因此,销毁列表中的第一个对象可能会使下一个对象无效。
您需要通过以下方式列出子小部件:
- 如果您使用的是 Qt5,则将 Qt::FindDirectChildrenOnly 标志传递给 findChild(在提出问题时该标志不存在......)
- 使用 QLayout 函数列出项目,
- 使用 QObject::children,并且对于每个测试,如果它是使用 isWidgetType() 或强制转换的小部件
- 在循环中使用 findChild() 并删除结果,直到返回空指针
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)