如何删除Qt窗口的所有子项?

时间:2011-11-21 15:59:40

标签: c++ qt

我有一个主窗口,我可以动态创建对象,因此在创建任何新屏幕之前,我必须先删除最后一个屏幕中的所有对象。我正在使用它,它工作得很好:

qDeleteAll(this->window->findChildren<QWidget*>());

但是现在我的屏幕上有一些QGraphicsViewQGraphicsScene,我也将它们的父视图设为主窗口,现在当我尝试删除所有主窗口时,我遇到了崩溃孩子。

所以我的问题基本上是,如何避免这次崩溃?如何轻松安全地删除主要窗口的所有子窗口,包括GraphicsSceneGraphicsView

1 个答案:

答案 0 :(得分:5)

我怀疑你的崩溃是由双重删除造成的。

QObject的父/子关系使得如果父项被删除,它的子项也会被删除。因此,如果您想删除一个小部件及其所有后代,那么您需要做的就是删除父级。

在你的情况下,我可能会确保所有动态创建的小部件属于某种容器小部件/框架并删除它,然后重新创建它。