QML:设计感知中的QML页面之间的导航
QML : Navigation between qml pages from design perception
我们需要开发一个Qtquick项目,其中有大约100个屏幕。
我试图为导航做一个演示项目,该项目在按钮点击上有三个屏幕。我在页面之间的导航中使用了"状态"的概念。最初,我使用"加载器"尝试了相同的尝试,但是加载程序无法保留页面的先前状态,它在导航期间重新加载了整个页面。
以下是main.qml
的代码段// import QtQuick 1.0 // to target S60 5th Edition or Maemo 5
import QtQuick 1.1
Rectangle {
id:main_rectangle
width: 360
height: 640
Page1{
id:page1
}
Page2{
id:page2
}
Page3{
id:page3
}
states: [
State {
name: "page2"
PropertyChanges { target: page3; visible:false; }
PropertyChanges { target: page1; visible:false; }
PropertyChanges { target: page2; visible:true; }
},
State {
name: "page1"
PropertyChanges { target: page3; visible:false; }
PropertyChanges { target: page2; visible:false; }
PropertyChanges { target: page1; visible:true; }
},
State {
name: "page3"
PropertyChanges { target: page1; visible:false; }
PropertyChanges { target: page2; visible:false; }
PropertyChanges { target: page3; visible:true; }
}
]
}
这与三个屏幕的小型POC一起运行良好,但对于100个屏幕定义状态不可行。
从设计方面,我们得出结论是使C 控制器控制状态,各个页面的可见性。
需要建议如何在C 中实现"状态"逻辑。
这是普通QML中最简单的解决方案,使用可配置的页面列表(例如模型) recreater 载荷项目,以不加载启动(Lazy Instanciation)的所有内容,而不是破坏A隐藏它后(如果我们回到它,则不必重新加载它):
import QtQuick 1.1
Rectangle {
id: main_rectangle;
width: 360;
height: 640;
// Put the name of the QML files containing your pages (without the '.qml')
property variant pagesList : [
"Page1",
"Page2",
"Page3",
"Page4",
"Page5"
];
// Set this property to another file name to change page
property string currentPage : "Page1";
Repeater {
model: pagesList;
delegate: Loader {
active: false;
asynchronous: true;
anchors.fill: parent;
visible: (currentPage === modelData);
source: "%1.qml".arg(modelData)
onVisibleChanged: { loadIfNotLoaded(); }
Component.onCompleted: { loadIfNotLoaded(); }
function loadIfNotLoaded () {
// to load the file at first show
if (visible && !active) {
active = true;
}
}
}
}
}
希望它有帮助!
我建议使用QT快速组件的stackView。这是其文档。
相关文章:
- 从C++实例化QML
- C++中std::resize(n)和std::shrink_to_fit之间的区别
- 使用CMake创建QML插件
- int(c) 和 c-'0' 之间的区别。C++
- 在cuda线程之间共享大量常量数据
- QT通过C++添加映射QML项目
- 在c代码之间共享数据的最佳方式
- Mix_Init和Mix_OpenAudio SDL之间的区别是什么
- C++ 使用 assign 函数的字符串与直接使用 '=' 更改值的字符串之间的区别
- Qml - c++ 类和 QmlRegisterType 创建的类之间的交换日期
- 在C 和QML之间共享(Q)网络通道
- 使用动态创建的选项卡元素在C 和QML之间绑定
- QML/real和C++/float之间的Qt类型错误
- QML:设计感知中的QML页面之间的导航
- QML和C++之间的适当配置
- 在C++和 QML 之间交换值
- 在QML文件之间共享对象
- C++和qml之间的问题
- 处理多个QML之间的信号
- 通过属性在c++和QML之间共享数组或列表