constructor - 当 QApplication quit() 时,它会自动释放它的所有子部件吗?

标签 constructor qt4

我想知道像下面这样的类,是否有必要手动调用delete mainLayout

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

QApplication 会自动释放其所有子部件吗?

最佳答案

当调用Dummy对象析构函数时,它的基类QWidget析构函数也将被调用(由C++),并且QWidget析构函数负责删除其父级是该Dummy对象的所有小部件。也就是说,这个 Dummy 对象的每个子对象都会被自动删除。

然后递归,因此所有子级的子级都被删除。

因此,当关闭 Qt 应用程序时,您需要手动删除的唯一 QWidget(实际上是 QObject)是那些父级为 0 的 QWidget,即顶级 QWidget。然后他们的析构函数将自动确保他们的所有 child 都被销毁。

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

Makes Qt delete this widget when the widget has accepted the close event (see QWidget::closeEvent()).

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

关于constructor - 当 QApplication quit() 时,它会自动释放它的所有子部件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7670012/

相关文章:

Java,将未声明的参数量传递给数组

asp.net-mvc - ASP.net MVC Controller - 构造函数的使用

c++ - Qt - 设置界面

c++ - 在 TreeView 中进行 "tracking"项选择的最简单方法?

c++ - C++中如何创建派生类

java - 在 Java 中运行构造函数代码之前字段是否已初始化?

templates - 如何从 mixin mixin 模板调用构造函数

c++ - 计算BMI程序

c++ - QT显示从网络访问管理器获取的图像

c++ - 为什么我不能将我的 QDialog 设置为没有 sizeGrip?