记录一个qt关闭窗口后crash的bug

今天调试一个程序的时候发现,关闭窗口就意外crash,

debug模式打开,关闭后有一行输出

HEAP[********.exe]: Heap block at 1D014FC8 modified at 1D015040 past requested size of 7

这就奇怪了,程序窗口都关闭了,怎么还crash,而且还是堆栈错误,

经过代码一行一行的注释,发现跟QQuickView有关,

我在QWidget中定义了成员变量

QQuickView m_contentView

然后初始化的时候加载qml,

把QQuickView相干的代码注释后,就不crash了,连其他小伙伴其他地方的crash的bug也不见了,但是总不能不显示界面吧,qml也写了那么多页面了,QQuickWidget换成QWidget也有点不现实,于是想了想以前没问题的时候,QQuickView好像是new出来的,于是把QQuickView换成了指针QQuickView*,结果居然不出问题了。

现在只能猜测跟QQuickView的生命周期有关系,如果定义成成员变量,类构造的时候这个成员变量就已经初始化了,可能qt有什么内存溢出的bug需要解决吧。

总结:

QQuickWidget还是没QWidget稳定

QQuickView等小组件还是手动new出来比较好

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

猜你喜欢

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