我想知道像下面这样的类,是否有必要手动调用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/