今天调试一个程序的时候发现,关闭窗口就意外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出来比较好