我正在尝试从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();