我们正在开发 QT 跨平台应用程序。应用程序有许多功能屏幕和导航。为了简化处理屏幕,我们使用 QT QML StackView。推送到的每个项目StackView
都是Page。我正在使用以下功能来推送和弹出屏幕。
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 并将其置于顶部。
我们可以简单地将屏幕 A 推到StackView
(A->B->C->D->A),但是我们正在将不同的 Signal/Slot 连接到每个屏幕/从每个屏幕连接,并且每次屏幕连接都不是一个好习惯推送,也不想增加应用程序的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 组件,我在文档中没有找到任何相关的内容。