Qt/QML: Как "переключиться" или "открыть" другой файл QML без перезапуска моего приложения?

У меня есть небольшое приложение, которое загружает файл QML с сервера и отображает пользователю своего рода "книжную полку".

Пользователь может выбрать одну из отображаемых книг, и C++ загрузит ZIP-файл в фоновом режиме, распакует его. Результатом является папка для каждой книги в файловой системе с файлом "main.qml", который в основном является автономной версией книги, позволяющей пользователю просматривать /zoom/etc.

я использую ApplicationWindow чтобы отобразить книжную полку в ее файле QML, и теперь мне интересно, как лучше всего было бы "переключиться" на книгу и отобразить ее в ApplicationWindow. В лучшем случае я имею в виду, что было бы неплохо, если бы книжная полка в значительной степени "выгружалась" из памяти, чтобы освободить ресурсы для отображения книги.

Как бы я это сделал?

Мои грубые идеи, которые кажутся мне не совсем "правильными":

  • использование QQmlApplicationEngine::load() загрузить другой URL?
  • Добавьте компонент QML книги как верхний дочерний объект на полку; но это приведет к большим потерям ресурсов.
  • ...?

Любые предложения приветствуются!

1 ответ

Самое основное решение было бы просто использовать Loader в окне вашего приложения. Установите его использовать свой main.qml при создании экземпляра, а затем, когда пользователь выбирает книгу, установите Loaderисточник в QML-файл книги.

Однако было бы лучше динамически загружать "экраны", тогда вы могли бы использовать эффекты перехода до разрушения предыдущего экрана.

Другие вопросы по тегам