Название: Как реализовать страницы? Отправлено: juvf от Июнь 11, 2015, 09:47 Простая задача... не могу решить. Допустим в приложении есть 10 разных окон (страниц на весь экран). На главном окне 3 кнопки. по нажатию на кнопку нужно перейти на соответствующую страницу. На других станицах есть кнопки переходи на главную страинцу и на другие окна. Как это реализовывается в Qml? Через какие механизмы.... хотя бы теоретически...
Название: Re: Как реализовать страницы? Отправлено: Old от Июнь 11, 2015, 10:15 Чисто теоретически. :)
Через механизмы скрытия - свойство visible. Плюс к этому механизм состояний - states. В каждом состоянии только одно окно visible = true. Название: Re: Как реализовать страницы? Отправлено: juvf от Июнь 11, 2015, 13:53 Спасибо! В 5 минут сделал.
Название: Re: Как реализовать страницы? Отправлено: kandrey от Июнь 12, 2015, 17:28 Есть еще компонент StackView. Можно также попробовать готовый каркас https://github.com/papyros/qml-material
Название: Re: Как реализовать страницы? Отправлено: Отражение луны от Июнь 14, 2015, 05:14 Возможно, будет полезно. В соседней теме пояснял как сделать это наименее костыльным методом. В Вашем случае самих табов не будет, но логика остается той же. Делаете свойство visiblePage и присваиваете ему id того элемента, который должен быть виден в данный момент. Остальные будут скрываться автоматически за счет property binding. http://www.prog.org.ru/topic_28870_0.html
Название: Re: Как реализовать страницы? Отправлено: BuRn от Июнь 14, 2015, 14:55 Чисто теоретически. :) Не правильный имхо подход, элементы по прежнему будут существовать на сколько мне известно, я придерживаюсь мнения что нужно создавать объекты по мере их необходимости, ну что-то типа Через механизмы скрытия - свойство visible. onClicked: clickNext(); onClickNext:{ holder=page.createObject(topLayer) } Название: Re: Как реализовать страницы? Отправлено: Old от Июнь 14, 2015, 15:00 Не правильный имхо подход, элементы по прежнему будут существовать на сколько мне известно Ну если вспомнить QStackedWidget, который применяют для подобного поведения на десктопе, то там все страницы существуют, а показывается только одна текущая.Но я вовсе не настаиваю. :) Название: Re: Как реализовать страницы? Отправлено: BuRn от Июнь 14, 2015, 15:19 Не правильный имхо подход, элементы по прежнему будут существовать на сколько мне известно Ну если вспомнить QStackedWidget, который применяют для подобного поведения на десктопе, то там все страницы существуют, а показывается только одна текущая.Но я вовсе не настаиваю. :) Название: Re: Как реализовать страницы? Отправлено: Old от Июнь 14, 2015, 15:27 Я думаю стоит различать "тяжеловатость" этих самых страниц, если на странице 2 кнопки, бесспорно проще сделать визибл/инвизибл, а вот если страница посерьезнее, я бы конечно создавал объекты. Как раз две кнопки легко создавать динамически, а вот тяжелые страницы постоянно пересоздавать, может быть не быстро.Хотя повторюсь, доказывать правильность я не буду. Оба подхода имеют право на жизнь и могут применяться в разных случаях. Название: Re: Как реализовать страницы? Отправлено: juvf от Июнь 15, 2015, 08:03 Есть еще компонент StackView. Это же обычный стек. с обычными pop и push. Зачем он здесь? запихнул туда странички 1,2,3,4,5.... текущая (видимая) 5-ая. потом нужно с 5-ой переключиься на 2-ую, потом на 4-ую, потом на 1-ую. Как это стеком делать со стеком?Цитировать В соседней теме пояснял как сделать это наименее костыльным методом. Через ListView/ListModel, пробовал, не получается.... какой-то оверинженеринг... да ещё и не работает толком... наверно руки нe из нужного места растут.Название: Re: Как реализовать страницы? Отправлено: Отражение луны от Июнь 15, 2015, 15:29 Через ListView/ListModel, пробовал, не получается.... какой-то оверинженеринг... да ещё и не работает толком... наверно руки нe из нужного места растут. Не, в Вашем случае не нужен никакой ListView/ListModel, в том примере они - часть вкладок, которые Вам не нужны. Естественно LisrView не подходит для этой задачи ровным счетом никак)Все что Вам нужно - назначить property у родителя страниц, содержащую ссылку на текущую отображаемую страницу, и на всех страничках прописать зависимость visible от этого значения. Типичная ошибка в этом случае (не то, чтобы прям ошибка, просто не удобно это) писать вот так: Код: page1.visible = false; когда можно написать Код: pagectl.visiblePage = page3; Код: visible: (pagectl.visiblePage==<id этой страницы>) Это будет работать лучше и использовать это удобнее, чем всякие states и ручное модифицирование visible каждой из страниц. Вашей реализации конечно я не видел, выкладываю инфу чисто для справки. Название: Re: Как реализовать страницы? Отправлено: juvf от Июнь 16, 2015, 06:43 Типичная ошибка в этом случае (не то, чтобы прям ошибка, просто не удобно это) Спасибо. Я уже эту ошибку сделал. Щя исправлю.Название: Re: Как реализовать страницы? Отправлено: Отражение луны от Июнь 16, 2015, 07:47 по мере их необходимости Это когда знаешь, что объект будет использован 1 раз и потом он уже не понадобится. Или этот подход используется в ListView, где нет никакого смысла сразу пытаться создать по делегату на каждый элемент модели, т.к. это сильно затруднит обновление. А вот если юзер перелистывает страницы по своему усмотрению куда лучше иметь в памяти все и сразу. Объекты создаются не мгновенно, каждый раз создавать страничку заново = тормоза. Да и если уж создавать, то через инкубатор, т.е. асинхронно. Название: Re: Как реализовать страницы? Отправлено: BuRn от Июнь 16, 2015, 10:58 по мере их необходимости Это когда знаешь, что объект будет использован 1 раз и потом он уже не понадобится. Или этот подход используется в ListView, где нет никакого смысла сразу пытаться создать по делегату на каждый элемент модели, т.к. это сильно затруднит обновление. А вот если юзер перелистывает страницы по своему усмотрению куда лучше иметь в памяти все и сразу. Объекты создаются не мгновенно, каждый раз создавать страничку заново = тормоза. Да и если уж создавать, то через инкубатор, т.е. асинхронно. Название: Re: Как реализовать страницы? Отправлено: juvf от Июнь 16, 2015, 12:32 Да у меня страниц не много. И Qml я только осваиваю... для начала статики заглаза. Может в будущем и динамику освою.
|