Почему QQuickWindow- ›close () не удаляет объект из rootObjects?

Я пытаюсь переключаться между разными файлами QML из C ++. Я использую 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();

который я нашел здесь: Правильная перезагрузка QQmlApplicationEngine

Это работает, в том смысле, что окно фактически закрывается, но и здесь возникает проблема - rootObject (из rootObjects QQMLApplicationEngine) не удаляется. Поэтому, если я несколько раз переключаюсь вперед и назад, список rootObjects просто увеличивается.

Кто-нибудь знает, что я делаю не так?


person Peter Johnsson    schedule 10.02.2017    source источник


Ответы (1)


Close просто закрывает объект явно, но не удаляет его. Позвонить после close:

pMainWindow->deleteLater();
person serwus    schedule 22.10.2020
comment
у меня сработало - у меня был таймер, который просто не останавливался. и теперь это так. :) - person TommySmoke; 19.06.2021