我正在尝试从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列表就会增加。

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

最佳答案

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

pMainWindow->deleteLater();

10-08 08:23