Когда создается экземпляр 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()
вылетает при попытке доступа к списку.