为什么QQuickWindow-> close()不从rootObjects中删除对象?

时间:2017-02-10 11:30:08

标签: c++ qt qml qqmlapplicationengine

我正在尝试在C ++中切换不同的QML文件。我使用QQMLApplicationEngine,我可以使用engine.load(filename)

加载新文件

在我这样做之前,我使用

关闭当前窗口(QQuickWindow)
QObject* pRootObject = in_pQmlApplicationEngine->rootObjects().first();
Q_ASSERT( pRootObject != NULL );
Q_ASSERT( pRootObject->objectName() == "mainWindow" );

QQuickWindow* pMainWindow = qobject_cast<QQuickWindow*>(pRootObject);
Q_ASSERT( pMainWindow );
pMainWindow->close();

我在这里找到:Properly reloading a QQmlApplicationEngine

这有效,意思是窗口实际关闭,但是,问题就出现了 - rootObject(来自QQMLApplicationEngine rootObjects)没有被删除。因此,如果我来回切换几次rootObjects列表就会增长。

有人知道我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

Close只是可见的关闭对象,但实际上并未将其删除。在close之后致电:

pMainWindow->deleteLater();