QT通过new创建的子窗口释放问题 setAttribute(Qt::WA_DeleteOnClose)

关闭QWidget及其子类窗口时需要销毁窗口时,close是不起作用的,close的本质是hide。
以下两种方法创建子窗口及释放问题。

一、如果你定义在栈上:

	QWidget* w;
    w.show();
这时候在构造函数中增加了:setAttribute(Qt::WA_DeleteOnClose),那么关闭的时候会出现异常情况,因为main退出的时候,会自动的销毁窗口,而setAttribute(Qt::WA_DeleteOnClose)再次销毁窗口,造成二次delete,会出错。

二、如果你定义在堆上

QWidget*  w= new QWidget();
w->show();
这时候在构造函数中增加了:setAttribute(Qt::WA_DeleteOnClose),在关闭时,main不会自动销毁窗口,因而setAttribute(Qt::WA_DeleteOnClose)会销毁一次窗口,所以不会出错。

你可能感兴趣的:(qt,c++,qt)