QT在StackView中安排组件
QT arranging Components in the StackView
我们正在开发QT Cross Platform应用程序。应用程序具有许多功能屏幕和导航。为了简单地处理屏幕,我们正在使用QT QML StackView。将每个项目推到StackView
都是页面。我正在使用以下功能推出和弹出屏幕。
stackview.push(someurl); //push new url
stackview.pop(); //pop current URL or page
我的问题是,我们如何重复使用组件/页面已经推入堆栈?
示例:我有以下屏幕A,B,C,D。Stack看起来像A-> B-> c-> d。现在,从屏幕D中,我想导航到屏幕A。由于应用程序的统一体系结构,我不想执行3次pop()
,而是应用程序应该重复使用已经按下屏幕A并将其提升到顶部。
我们可以简单地将屏幕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
可以基于索引的LAOD StackView组件,我在文档中找不到任何与之相关的内容。
由于应用程序的统一体系结构,我不想进行3次pop(),而应重复使用已按下屏幕A并将其最高。
您不必三次致电POP()才能返回A。根据documentation
:
项目pop(item item =不确定) [...]
项目:如果指定,将弹出所有项目(但不包括)项目。如果项目为null,则所有项目都将降低到(但不包括)第一个项目将被弹出。,如果未指定,则仅将弹出当前项目。
仅致电pop(null)
一次将您的堆栈推到第一个推动。
另一种可能的方法是使用StackLayout
,允许您根据索引显示QML组件。
StackLayout {
id: layout
Screen1 {}
Screen2 {}
Screen3 {}
Screen4 {}
}
然后,您可以通过更改currentIndex
属性来选择出现的屏幕:layout.currentIndex = 1 // display Screen2
- 如何将 txt 文件中的行分隔为组件C++
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 到连接组件算法的问题(递归)
- 两个 COM 组件中 ENUM 的重复条目
- 为什么 gcc 会产生这种奇怪的组件与叮当声?
- 使用 bfs 解决连接组件问题时得到错误的答案
- 如何在ECS框架中更新组件数据和通知系统
- 如何从ECS中的模板方法获取组件?
- 使用蓝牙组件将数据从Android手机传输到串行设备时出现问题
- 组件上的虚幻引擎可蓝图UFUNCTION会导致构建错误
- 在C++中访问蓝图类组件的正确方法是什么?
- 有关纯 ECS(实体组件系统)和更新系统的问题
- 提高基于组件的游戏引擎的效率
- 从组件的 std::type_index 获取派生最多的类型
- 我们可以将阈值应用于色彩空间模型的单个组件(如 RGB 和 LAB)吗?
- 如何通过 UActor组件获取演员列表?
- 在Visual Studio 2017中使用c ++组件构建python解决方案时出现问题
- 如何访问基类向量中的子类变量?(对于实体组件系统)
- 根据组件 1、2(和 3)对空间 (2D/3D) 向量进行排序
- QT在StackView中安排组件