Есть следующий код. Он создает объект QGraphicsView, устанавливает сцену, а затем создается объект QGraphicsWebView, который добавляется к сцене:
QGraphicsWebView* graphicsWebView;
QGraphicsScene* graphicsScene;
QGraphicsView* graphicsView;
QMainWindow* mainWindow;
class Deleter : public QObject
{
Q_OBJECT
public slots:
void deleteWebView()
{
mainWindow->hide();
mainWindow->centralWidget()->setParent(0);
mainWindow->setCentralWidget(new QWidget());
delete graphicsView; // <-- crashes about 2 seconds after that
}
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
mainWindow = new QMainWindow;
graphicsView = new QGraphicsView;
graphicsScene = new QGraphicsScene(graphicsView);
graphicsView->setScene(graphicsScene);
graphicsWebView = new QGraphicsWebView;
graphicsWebView->setUrl(QUrl("http://www.google.com"));
graphicsView->scene()->addItem(graphicsWebView);
graphicsView->setViewport(new QGLWidget());
graphicsView->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
mainWindow->setAttribute(Qt::WA_TranslucentBackground);
mainWindow->setCentralWidget(graphicsView);
mainWindow->show();
Deleter d;
QTimer::singleShot(10000, &d, SLOT(deleteWebView()));
return app.exec();
}
#include "main.moc"
Через 10 секунд вызывается слот, который пытается удалить объект QGraphicsView. Проблема в том, что когда я пытаюсь удалить graphicsView, программа вылетает примерно через 2 секунды. Обратные пути - это мусор. Теоретически объект QGraphicsView должен удалять своих дочерних элементов, а дочерним объектом является объект QGraphicsScene. Сцена должна удалить свой дочерний объект, который является объектом QGraphicsWebView.
Как правильно удалить объект QGraphicsView без сбоя процесса?
Это Qt 4.8