繁体   English   中英

Qt Widget内存管理

[英]Qt Widget Memory Management

所以我对Qt的内存管理有点困惑。 我正在查看开始的示例和教程并看到了这一点

 QApplication app(argc, argv);
 QWidget window;
 QLabel *label = new QLabel(QApplication::translate("windowlayout", "Name:"));
 QLineEdit *lineEdit = new QLineEdit();

 QHBoxLayout *layout = new QHBoxLayout();
 layout->addWidget(label);
 layout->addWidget(lineEdit);
 window.setLayout(layout);
 window.setWindowTitle(
     QApplication::translate("windowlayout", "Window layout"));
 window.show();
 return app.exec();

哪个是好的,除了我在创建新小部件时没有看到任何内存释放,现在这只是为了教程,所以他们不会混淆人或者是由Qt自动处理的内存管理。 因为看着这个,我不得不相信存在内存泄漏,因为没有任何东西被释放。

小部件被他们的父母破坏(例如,当你调用layout->addWidget ,布局获取传递的小部件的所有权)。 在你的情况下, window将在范围的末尾(当app.exec返回时)被销毁,这反过来将破坏布局,这反过来将破坏标签和编辑框。

Qt文档中的对象树和所有权

在Qt中,基于层次结构释放对象。 即当释放QObject时,它的所有子节点都将被释放(基于作为参数传递给对象构造函数的父节点)。

Qt构建了一个内部的事物树(布局,小部件,对话框......),只要Qt认为这是可以的,就可以释放它们。 这个层次结构是在“事物”的构造函数中使用parent-parameter构建的,或者是通过某些其他函数调用(如addWidget)传递责任时构建的。 因此,当Qt或某个小部件接管了责任时,您甚至不被允许删除“事物”。 请参阅Qt中的文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM