QT-子窗口关闭时,为什么不执行析构函数问题
子窗体的构造函数中初始化了父窗体的parent,当关闭子窗体时不会调用析构函数,
只有关闭父窗体时,才会调用子窗体的析构函数,
解决办法如下
setAttribute(Qt::WA_DeleteOnClose);
写在子窗体的构造函数就可以了~
按照文库的说法,“如果子窗体初始化了父窗体的parent,只有父窗体析构时才执行自己的析构函数。”
根据我的经验,系统默认的构造函数中parent都有默认值0,而构造函数的实现中,都有初始化列表指定父类的parent为当前parent,如果不指定,也就是0。这里还不能把parent指定位父窗体,否则子窗体会作为一个父窗体当中的“部件”而存在。父类和父窗体不是一个东西。所以文库当中的说法我暂时不太明白。
我的想法是这样,既是不初始化父类的parent,它的构造函数中parent参数依然会有默认值为空指针,所以是否执行析构函数,和初始化父类构造函数我想不出联系。
但是文库中给出了解决方法,在子窗体构造函数中加一句即可:
setAttribute(Qt::WA_DeleteOnClose);
这才是最重要的。根据qt的文档,这个属性就是在close时delete。
Qt::WA_DeleteOnClose 55
Makes Qt delete this widget when the widget has accepted the close event (see QWidget::closeEvent()).
就是每次设计窗体时,事实上必须加这一句