2015-02-04 6 views
1

У меня есть небольшое приложение, которое загружает QML-файл с сервера и отображает пользователю какую-то «книжную полку».Qt/QML: Как я могу «переключиться на» или «открыть» другой файл QML без перезагрузки моего приложения?

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

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

Как мне это сделать?

Мои грубые идеи, которые не чувствуют себя вполне «правильно» были:

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

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

+0

Вы можете вручную создавать/уничтожать компоненты QML из контекста Javascript QML: http://doc.qt.io/qt-5/qtqml-javascript-dynamicobjectcreation.html – MrEricSir

ответ

0

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

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