gpt4 book ai didi

c++ - QML : Navigation between qml pages from design perception

转载 作者:可可西里 更新时间:2023-11-01 17:52:00 28 4
gpt4 key购买 nike

我们需要开发一个 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++ Controller ,我们控制各种页面的状态和可见性。

需要有关如何在 C++ 中实现“状态”逻辑的建议。

最佳答案

这是纯 QML 中最简单的解决方案,使用可配置的页面列表(如模型)+ Repeater + Loader 项目在启动时不加载所有内容(惰性实例化)并且在隐藏页面后不销毁它(没有如果我们回来重新加载它):

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;
}
}
}
}
}

希望对您有所帮助!

关于c++ - QML : Navigation between qml pages from design perception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13049896/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com