• 8440阅读
  • 6回复

[结贴]QT的内存管理问题:请问QT控件类在析构时是否需要被delete [复制链接]

上一主题 下一主题
离线84211698
 

只看楼主 倒序阅读 楼主  发表于: 2014-02-26
查看QT提供的例子,它对所有new出来的控件都没有调用delete来进行释放。
我的问题是,QT能对这些控件做好内存管理吗?



离线rozendew

只看该作者 1楼 发表于: 2014-02-26
有些在构造函数中有 parent 传入,而没有的也在其设置或添加、插入之类函数中设置了parent。
这是Qt的父子内存管理方式,当父被析构时,其关联的子项会先被调用析构。
1条评分金钱+1
84211698 金钱 +1 正确的回答了我的提问 2014-02-28
我只是知道我所知道的
离线noidea

只看该作者 2楼 发表于: 2014-02-26
你可以参见Qt官方文档 Object Trees & Ownership,http://qt-project.org/doc/qt-4.8/objecttrees.html

你的问题可以引用里边一句话来解释
The parent, window, and the child, quit, are both QObjects because QPushButton inherits QWidget, and QWidget inherits QObject.

talk in code
Qt5.2.1 + MacOSX10.9
离线wjz2047

只看该作者 3楼 发表于: 2014-02-27
长见识了
离线84211698

只看该作者 4楼 发表于: 2014-02-27
在网上查了一下
http://blog.csdn.net/wangtaohappy/article/details/8818874   QT子窗体占用系统资源的释放问题 .
是否正确还请大家一起讨论

补充  QT父子与QT对象delete http://www.cnblogs.com/foxhengxing/archive/2010/12/24/1916355.html  

离线84211698

只看该作者 5楼 发表于: 2014-02-27
回 noidea 的帖子
noidea:你可以参见Qt官方文档 Object Trees & Ownership,http://qt-project.org/doc/qt-4.8/objecttrees.html
你的问题可以引用里边一句话来解释
The parent, window, and the child, quit, are both QObjects because QPushButton inherits QWidget, and QWidget inherits QObject .. (2014-02-26 17:37) 

首选表示感谢
我看了你给的链接后,感觉子窗口的释放跟它是否有父窗口有关,如果没有父窗口了?
离线noidea

只看该作者 6楼 发表于: 2014-02-27

准确的说,当你的control都是从QObject里边继承来的,那么QObject就会用tree的方式来管理。
如果你的window有parent window,而这个parent window从QObject继承来,那么也是被QObject被销毁,就会一个个销毁他的children。

所以你的问题,如果没有父窗口怎么办?
那就看你的子窗口是不是从QObject继承来的。
如果是你自己创建的,你当然对它负责,在合适的时候回收它,比如在destructor里边,比如在closeEvent里边。

CSDN里边提到的方法可用,具体针对你需要的情况,比如多线程时候,比如占用Camera资源时候,等等,在特定的时间你需要做回收。
1条评分金钱+5
84211698 金钱 +5 感谢,我终于明白了 2014-02-28
talk in code
Qt5.2.1 + MacOSX10.9
快速回复
限100 字节
 
上一个 下一个