我们正在开发QT跨平台应用程序。应用程序有许多功能屏幕和导航。为了简化处理屏幕,我们使用QT QML StackView。每个项目推到StackView
是Page。我正在使用以下功能来推送和弹出屏幕。QT在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并将其带到上面。我们可以简单地将屏幕A推到StackView
(A-> B-> C-> D-> A),但是我们将不同的信号/插槽连接到每个屏幕或从每个屏幕连接不同的信号/插槽,并不是好的做法连接每次屏幕推送时,也不想长大应用程序StackView
大小。
这种情况下最好的方法是什么?任何其他QT组件/控件,我可以在这种情况下使用,以便我可以根据索引呈现页面?
我们尝试预先创建组件qml Property并根据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组件,我没有找到任何与文档相关的东西。
一个'StackView'是一个堆栈,在堆栈上,你总是推ontop的东西,如果你想工作你自己下来在较低层找到一些东西。如果你不想有这种行为,你不应该使用'StackView'。您可以轻松地为此创建自己的容器。你可以例如将创建的项目推送到'ObjectModel'并仅显示具有正确索引的项目。 – derM
首先,@derM有权利。如果你想在加载页面之间切换,StackView不是最好的选择。但是,如果页面应该被加载和卸载,它是。你可以简单地指定一个项目作为pop - > pop(ScreenA)的参数,而不是调用pop()三次或更多次,所有的项目都会弹出(但不包括)项目。 – Xplatforms