다음 코드가 있습니다. 그것은를 QGraphicsView 객체를 생성하는 장면을 설정하고 장면에 추가됩니다 QGraphicsWebView 개체가 생성됩니다중앙 위젯 인 QGraphicsView 객체를 올바르게 삭제하는 방법은 무엇입니까?
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
없습니다 : 당신이 더 이상 필요하지 않을 때 단순히 위젯을 삭제합니다. –