当Quit()退出时,QApplication会自动释放所有子窗口小部件吗?

时间:2011-10-06 03:17:38

标签: constructor qt4

我想知道如下所示的课程,是否需要手动拨打delete mainLayout

class Dummy : public QWidget { 
        public:
                Dummy() { mainLayout = new QHBoxLayout(); setLayout(mainLayout); }
                ~Dummy() { delete mainLayout; } 
        private:
                QHBoxLayout *mainLayout;
}

QApplication会自动发布所有子窗口小部件吗?

1 个答案:

答案 0 :(得分:4)

当调用Dummy对象析构函数时,它的基类QWidget析构函数也将被调用(通过C ++),并且QWidget析构函数负责删除其父作为此Dummy对象的任何窗口小部件。也就是说,此Dummy对象的每个子节点都会被自动删除。

然后递归,所有孩子的孩子都被删除了。

因此,当关闭Qt应用程序时,您需要手动删除的唯一QWidgets(实际上是QObject)是父级为0的那些,即顶级的。他们的破坏者将自动确保他们所有的孩子都被摧毁。

Qt namespace page中所述,还有标志Qt :: WA_DeleteOnClose。这样:

  

当小部件接受了close事件时,让Qt删除这个小部件(参见QWidget :: closeEvent())。

我认为这个标志并不常用。因此,一个好的一般规则就是确保在应用程序关闭时删除顶级小部件。