记录Qt窗口关闭时不小心导致的bug

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对象,是否设置关闭时释放属性

发布了275 篇原创文章 · 获赞 46 · 访问量 28万+

猜你喜欢

转载自blog.csdn.net/youyudexiaowangzi/article/details/104080389