美好的一天!
使用Qt 4.7.3,以下示例在QGraphicsScene ::〜QGraphicsScene()调用时崩溃:
#include <QCoreApplication>
#include <QGraphicsScene>
int main( int argc, char* argv[] )
{
// replace this with QObject app; and no problems
QCoreApplication app( argc, argv );
new QGraphicsScene( &app );
return 0;
}
有什么想法吗?
更新:
Bug report已创建。
答案 0 :(得分:2)
当构造QGraphicsScene
实例时,它会将自身附加到存储在单个QApplication
实例的私有成员中的列表中,当它被删除时,它也会从该列表中删除它自己:
QGraphicsScene::~QGraphicsScene()
{
Q_D(QGraphicsScene);
// Remove this scene from qApp's global scene list.
qApp->d_func()->scene_list.removeAll(this);
...
}
当销毁应用程序对象时,递归调用继承的基类'析构函数,因此~QApplication()
调用~QCoreApplication()
,它本身调用~QObject()
。
实际删除子对象是在~QObject()
中完成的。
这意味着当场景对象被销毁时,所有QApplication
成员都已被销毁,因此~QGraphicsScene()
在尝试访问列表时崩溃。