2014-01-23 4 views
7

Мне было предложено создать приложение для клиента, которое потенциально может быть как на Android, так и на iOS (сначала на iOS). Поэтому я думал, что Qt может быть ответом. Я хотел бы использовать Qt Quick для создания приложения, но я не могу найти способ эффективно обрабатывать несколько страниц, имея в виду, что каждая страница может быть довольно тяжеловесной.Многостраничные приложения в QML

До сих пор я пытался:

  • Разбивка с погрузчиками т.е. динамически потянув в нужном экране. Это работает, но есть заметная задержка при первом загрузке экрана.
  • Создание каждой страницы компонента и отображение только необходимого экрана. Это загружает все страницы при запуске, который слишком тяжелый.
  • Создание каждой страницы компонента и отображение их через ListView. Та же проблема, что и выше.

Должно быть промежуточное место, где виды могут по существу перейти в режим с низкой памятью, например, в родных приложениях iOS. Любые предложения приветствуются.

Примечание: Прогрессирование экраны не обязательно линейной

+0

Вы пытались переключать состояния? – Kakadu

+0

@ Какаду, когда вы говорите, что переключает состояния, что вы имеете в виду? –

+0

Эти состояния: http://qt-project.org/doc/qt-5.0/qtquick/qtquick-statesanimations-states.html – Kakadu

ответ

2

Мой опыт работы с QML является довольно ограниченным, но с опытом других UX я думаю, что решение будет включать рефакторинга ваши страницы, чтобы использовать Loader элемент для их внутренние дети/Компоненты. Из того, что я читал, похоже, что вы используете элемент Loader на каждой странице.

Например, когда ваша программа загружается на ваши страницы, она должна быть довольно светлой для памяти, в противном случае многие из них по-прежнему являются крупными компонентами, которые необходимо динамически загружать.

Когда пользователь предоставляет ввод для перехода на определенную страницу, анимируйте/покажите, как обычно, это не должно задерживаться. Сама страница должна использовать элемент Loader для каждого компонента, который должен быть загружен (т. Е. С большими отпечатками памяти).

В то время как компоненты загружаются, вы можете показать прогресс/анимацию колеса. Как только компонент закончил загрузку через onLoaded signal, вы можете скрыть индикатор выполнения/колесо.

Вы также можете посмотреть напозиции asynchronous property, чтобы обеспечить любую анимацию (то есть индикатор выполнения/колесо), в то время как компоненты загружаются, избегая сбоев.

Наконец, когда страница должна быть скрыта, просто установите для каждого Loader пункт active property в false и он должен освободить загруженный компонент.

Надеюсь, что это поможет и не повторяет то, что вы уже пробовали.

+0

Спасибо за ответ. Это в значительной степени то, что я пробовал, показывая диалог загрузки при загрузке страниц, это довольно плохой UX. Мне не нужно было бы это делать для родного приложения iOS, и именно это я пытаюсь подражать, то есть такого же рода пользовательский опыт, который вы получите из собственного приложения. Это может быть продуктом платформы, которая является довольно новой на мобильных платформах, что до сих пор не существует достойной стратегии поискового вызова !? –

+0

Я использовал несколько приложений для iOS, которые занимают время при загрузке страницы и показывают анимацию прогресса после выбора опции. Я не думаю, что совершенно необычно задерживать показ содержимого страницы во время загрузки компонента или получения данных. :) Надеюсь, проект идет хорошо! – Matthew

+0

Cheers. Я мог понять, был ли HTTP-запрос или что-то, что загружало данные, но для собственного приложения без сетевых зависимостей загрузка пользовательского интерфейса в значительной степени мгновенно. Я думаю, что я посмотрю на создание структуры подкачки, которая довольно динамична, но достаточно умна, чтобы знать, какие представления хранятся в памяти и которые не удерживать. Я вернусь сюда, если я это сделаю, тем временем, любые другие предложения приветствуются! –

0

Старый вопрос, но Qt.ControlsStackView имеет поддержку для толкания и выскакивания различными анимациями.

Как и в предыдущих ответах, использование Loader также является опцией, но оно не позволяет легко анимировать изменение (при смене представлений старые и новые недоступны одновременно, поэтому вы не можете делать приятная анимация).

Альтернативой является использование Component s, ленивый экземпляр представлений и оживление переходов.Посмотрите пример в QtWS 2015, поговорите, слайды и код available here.

Смежные вопросы