QGraphicsScene ::〜QGraphicsScene()分段错误

时间:2011-10-28 13:34:17

标签: qt segmentation-fault qgraphicsscene

美好的一天!

使用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已创建。

1 个答案:

答案 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()在尝试访问列表时崩溃。