Компоненты QT, расположенные в StackView

Мы разрабатываем кроссплатформенное приложение QT. Приложение имеет множество функциональных экранов и навигации. Для простоты работы с экранами мы используем QT QML StackView. Каждый предмет выдвинут StackView является страница. Я использую следующую функцию для нажатия и всплывающих экранов.

stackview.push(someurl); //push new url

stackview.pop(); //pop current URL or page

Мой вопрос: как мы можем повторно использовать компоненты / страницы, уже помещенные в стек?

Пример : У меня есть следующие экраны A, B, C, D. Стек выглядит как A-> B-> C-> D. Теперь с экрана D я хочу перейти на экран A. Из-за единой архитектуры приложения я не хочу делать это 3 раза pop()Вместо этого приложение должно повторно использовать уже нажатый Экран A и довести его до верха.

Мы можем просто нажать на экран А StackView (A-> B-> C-> D-> A), но мы подключаем разные сигналы / слоты к / с каждого экрана, и не рекомендуется устанавливать соединение при каждом нажатии на экран, также не хотим вырастить приложение StackView размер.

Какой будет лучший подход для использования в этом случае? Любой другой компонент / элемент управления QT, который я могу использовать в этом случае, чтобы я мог отображать страницы в зависимости от индекса?

Мы попытались создать компонент заранее, так как Свойство qml и нажмите его в зависимости от URL. Это полезно сработало в примере приложения. но в нашем приложении данные компонента QML тесно зависят от данных C ++ (или некоторых вычислений во время выполнения). Приложение вызывает сбой, если мы создаем компонент заранее. Поэтому мы не хотим использовать этот подход.

property Page page1: Screen1{} //Screen1.qml
property Page page2: Screen2{} //Screen2.qml
property Page page3: Screen3{} //Screen3.qml
property Page page4: Screen4{} //Screen4.qml

Можно ли положить компонент Stackview на основе индекса, я не нахожу ничего связанного с этим в документах.

2

Решение

Из-за единой архитектуры приложения я не хочу делать pop три раза, вместо этого приложение должно повторно использовать уже нажатый экран A и вывести его наверх.

Вам не нужно вызывать pop () три раза, чтобы вернуться к A. Согласно documentation :

Элемент pop (Item item = undefined)
[…]

item: если указано, все элементы вплоть до (но не включая) элемента будут удалены. Если элемент равен нулю, все элементы вплоть до (но не включая) первого элемента будут выталкиваться. Если не указано, будет добавлен только текущий элемент.

Только звонок pop(null) один раз, чтобы ваш стек пошел к первому толчку.

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

StackLayout {
id: layout

Screen1 {}
Screen2 {}
Screen3 {}
Screen4 {}
}

Затем вы можете выбрать, какой экран появится, изменив currentIndex имущество : layout.currentIndex = 1 // display Screen2

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]