QWidget及其子类显示一般两个步骤:构造,显示
QWidget w;
w.show()
或者
QWidget *p = new QWidget();
p->show();
如果在函数中显示窗口,使用第一个步骤,窗口闪一下就没了,函数代码块结束的时候,窗口这个临时变量的生命周期也就结束了,自动释放了
如果在函数中显示窗口,使用第二个步骤,关闭窗口之后要么监听close事件,释放对应数据,要么设置属性
setAttribute(Qt::WA_DeleteOnClose)
让窗口关闭时执行delete。
。
。
。
。
bug:
1.设置了WA_DeleteOnClose属性,然后自己又delete了一遍,会导致双释放,最好用deleteLater()
2.设置了WA_DeleteOnClose属性,但是这个窗口不是new出来的,而是直接QWidget w定义出来的,会导致HEAP error
Invalid Address specified to RtlValidateHeap
不是new出来的,deleteLater也不对,所以要自己控制好是否new对象,是否设置关闭时释放属性