当前位置: 代码迷 >> QT开发 >> 关于QDialog对象delete的有关问题!
  详细解决方案

关于QDialog对象delete的有关问题!

热度:148   发布时间:2016-04-25 03:09:57.0
关于QDialog对象delete的问题!!!
文档上说:QObject及其派生类的对象,如果其parent非0,那么其parent析构时会析构该对象。


那么是不是我定义一个类
class myDlg : public QDialog

现在我new出一个类对象实例   myDlg *pDlg = new myDlg;

那么如果构造函数写成:
myDlg(QWidget *parent = 0);
这样,是不是意味着我必须自己delete掉new出的类对象?

如果构造函数写成:
myDlg(QWidget *parent);
这样,是不是意味着我不需要手动delete掉自己new出的类对象?

还是说只要是继承自QObject的类,全部不需要自己delete对象???

======================

另外再问个问题,bool QWidget::close()  这个函数,当close掉一个窗口后,是不是只意味着窗口被隐藏掉了?指向它的指针已然有效?如果是,那么岂不是会占用内存?
------解决思路----------------------
1.继承自QObject的类,自己本身都维护着父子关系列表:自己的parent,和自己childe的列表,parent有一个,child有好多个。
当QObject析构的时候,会遍历自己的child的列表,然后将自己的child全部析构。

就这个dialog来说,如果自己的parent设置为0,那么只有自己释放这个dialog的空间。


2.bool QWidget::close(),调用后,默认是隐藏了窗口,但是如果这个窗口设置了  Qt::WA_DeleteOnClose 标记,此时调用close(),会析构窗口。
  相关解决方案