Qt小部件内存管理
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构建了一个内部的东西树(布局,小部件,对话框,…),被释放,只要Qt认为这是好的。这个层次结构是用"things"的构造函数中的父参数构建的,或者当责任被其他函数调用(如addWidget)转移时。所以你甚至不允许删除"东西",当Qt或一些小部件已经接管了责任。
在Qt中对象是基于层次结构释放的。也就是说,当QObject被释放时,它的所有子对象都将被释放(基于作为参数传递给对象构造函数的父对象)。
相关文章:
- 当vector是tje全局变量时,c++中vector的内存管理
- 当分配一个字符串值并稍后通过分配另一个值进行更改时C++如何管理内存?
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 可以通过非原始指针来增强容器矢量管理内存
- 如何使用 std::vector<std::tuple<A,B>> 来管理内存(调整大小、保留,...),但实际上将 As 保留在 B 之前,连续
- 线程管理内存泄漏
- 通过读取文件创建映射<字符串,矢量>时如何管理内存<string>
- 管理内存C++
- ptr_vector如何管理内存
- 在C++Builder/Firemonkey中使用表单创建来管理内存
- 如何正确管理内存(运行时)C++
- 在Node.js中使用Native Abstractions时,如何管理内存
- ostream是如何管理内存的
- C++中管理内存泄漏的问题
- OpenCL:在 CPU 上而不是在 GPU 上更正结果:如何正确管理内存
- deque是如何管理内存的
- 用c++/cli互操作管理内存
- 如何衡量管理内存所花费的时间
- (加速C++)章节管理内存
- 如何在此场景中管理内存