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

Pau*_*acó 1 c++ qt

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

qDeleteAll(this->window->findChildren<QWidget*>());
Run Code Online (Sandbox Code Playgroud)

但现在我有这个屏幕,有一些QGraphicsViewQGraphicsScene,和我做了他们的父母在主窗口为好,现在我有一个崩溃当我尝试删除所有主窗口的孩子.

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

Chr*_*ris 5

我怀疑你的崩溃是由双重删除引起的.

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

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

  • QObjects在删除时会删除它们的子节点,但QObject系统中没有内置引用计数.程序员仍然可以确保正确管理内存,这使得它变得更加容易. (2认同)