Qt Quick之StackView具体解释(2)
在“StackView具体解释(1)”中,我们学习了StackView的基本使用方法,这次呢,我们来讲delegate的定制、被管理的View的生命周期、查找View等主题。
本文还会用到“StackView具体解释(1)”中的演示样例,如有须要能够回头看看。
附加属性
首先看看StackView提供的附加属性 Stack(后面会用到):
- Stack.index,index代表当前Item在StackView里的索引,从0開始哦,和StackView.depth不同哦,depth从1開始。
- Stack.status。这是一个枚举值,代表当前Item的状态。
- Stack.view,指向当前Item所属的StackView实例
我们能够在StackView管理的Item里直接訪问附加属性。后面会有演示样例。
查找View
StackView有一个find方法:find(func, onlySearchLoadedItems)。
这种方法让我们提供一个比較函数,它会对StackView管理的页面应用指定的func函数,当func返回true时,就觉得找到了须要的View,find()会返回这个View。第二个參数onlySearchLoadedItems为true时,说明仅仅查找载入到内存中的Item。为false时,则查找全部Item。
来看一个简单的样例。基于之前的样例改动的。改动的地方我做了标注。
import QtQuick 2.4
import QtQuick.Controls 1.3
import QtQuick.Window 2.2
Window {
title: "StackViewDemo";
width: 480;
height: 320;
visible: true;
StackView {
id: stack;
anchors.fill: parent;
/*
onBusyChanged: {
console.log("busy - " + stack.busy);
}
*/
Text {
text: "Click to create first page";
font.pointSize: 14;
font.bold: true;
color: "blue";
anchors.centerIn: parent;
MouseArea {
anchors.fill: parent;
onClicked: if(stack.depth == 0)stack.push(page);
}
}
}
Component {
id: page;
Rectangle {
color: Qt.rgba(stack.depth*0.1, stack.depth*0.2, stack.depth*0.3);
property alias text: txt.text; //property alias
Text {
id: txt; //new code
anchors.centerIn: parent;
font.pointSize: 24;
font.bold: true;
color: stack.depth <= 4 ? Qt.lighter(parent.color) : Qt.darker(parent.color);
//在onCompleted中为text属性赋值
//避免属性绑定,方便查找。
Component.onCompleted: {
text = "depth - " + stack.depth;
}
}
Button {
id: next;
anchors.right: parent.right;
anchors.bottom: parent.bottom;
anchors.margins: 8;
text: "Next";
width: 70;
height: 30;
onClicked: {
if(stack.depth < 8) stack.push(page);
}
}
Button {
id: back;
anchors.right: next.left;
anchors.top: next.top;
anchors.rightMargin: 8;
text: "Back";
width: 70;
height: 30;
onClicked: {
if(stack.depth > 0) stack.pop();
}
}
Button {
id: home;
anchors.right: back.left;
anchors.top: next.top;
anchors.rightMargin: 8;
text: "Home";
width: 70;
height: 30;
onClicked: {
if(stack.depth > 0)stack.pop(stack.initialItem);
}
}
Button {
id: clear;
anchors.right: home.left;
anchors.top: next.top;
anchors.rightMargin: 8;
text: "Clear";
width: 70;
height: 30;
onClicked: {
if(stack.depth > 0)stack.clear();
}
}
//new code
Button {
id: popTo3;
anchors.right: clear.left;
anchors.top: next.top;
anchors.rightMargin: 8;
text: "PopTo3";
width: 70;
height: 30;
onClicked: {
var resultItem = stack.find(
function(item){
console.log(item.text);
return item.text === "depth - 3" ? true : false;
}
);
if(resultItem !== null)stack.pop(resultItem);
}
}
}
}
}
我给id为page的组件。加入了一个PopTo3的button,点击它,会退栈。直到栈的深度为3。
find()方法查找时的顺序。是从栈顶到栈底。
假设找不到,则返回null。假设调用pop(null),则会直接退到栈底,即栈深度为1。所以我在代码里做了推断,假设find返回null,就不调用pop。
代码里另一些变化,为了方便通过文本查找,我给page的Rectangle加入了一个属性别名。指向它内部的Text对象的text属性。
事实上假设使用StackView的get(index)方法,PopTo3的onClicked信号处理器还能够重写成以下的样子:
onClicked: {
var resultItem = stack.get(2);
if(resultItem !== null)
Qt Quick之StackView具体解释(2)的更多相关文章
- Qt Quick之StackView具体解释(1)
Qt Quick中有个StackView.我在<Qt Quick核心编程>一书中没有讲到.近期有人问起,趁机学习了一下,把它的基本使用方法记录下来. 我准备分两次来讲.第一次讲主要的使用方 ...
- Qt Quick 之 PathView 具体解释
PathView ,顾名思义,沿着特定的路径显示 Model 内的数据. Model 能够是 QML 内建的 ListModel . XmlListModel ,也能够是在 C++ 中实现的 QAbs ...
- Qt Quick实现的涂鸦程序
之前一直以为 Qt Quick 里 Canvas 才干够自绘.后来发觉不是,原来还有好几种方式都能够画图! 能够使用原始的 OpenGL(Qt Quick 使用 OpenGL 渲染).能够构造QSGN ...
- Qt Quick综合实例之文件查看器
假设你基于Qt SDK 5.3.1来创建一个Qt Quick App项目,项目模板为你准备的main.qml文档的根元素是ApplicationWindow或Window.这次我们就以Applicat ...
- Qt on Android: Qt Quick 之 Hello World 图文具体解释
在上一篇文章,<Qt on Android:QML 语言基础>中,我们介绍了 QML 语言的语法,在最后我们遗留了一些问题没有展开,这篇呢,我们就正式開始撰写 Qt Quick 程序,而那 ...
- Qt Quick 组件和动态创建的对象具体的解释
在<Qt Quick 事件处理之信号与槽>一文中介绍自己定义信号时,举了一个简单的样例.定义了一个颜色选择组件,当用户在组建内点击鼠标时,该组件会发出一个携带颜色值的信号,当时我使用 Co ...
- Qt Quick 之 QML 与 C++ 混合编程具体解释
Qt Quick 技术的引入.使得你能够高速构建 UI ,具有动画.各种绚丽效果的 UI 都不在话下.但它不是万能的.也有非常多局限性,原来 Qt 的一些技术,比方低阶的网络编程如 QTcpSocke ...
- Qt 学习之路 :Qt Quick Controls
自 QML 第一次发布已经过去一年多的时间,但在企业应用领域,QML 一直没有能够占据一定地位.很大一部分原因是,QML 缺少一些在企业应用中亟需的组件,比如按钮.菜单等.虽然移动领域,这些组件已经变 ...
- Qt Quick 事件处理之信号与槽
前面两篇文章<QML 语言基础>和<Qt Quick 简单教程>中我们介绍了 QML 语言的基本的语法和 Qt Quick 的常见元素,亲们,通过这两篇文章,您应该已经能够完毕 ...
随机推荐
- CAD交互绘制圆(com接口)
CAD绘制图像的过程中,画圆的情况是非常常见的,用户可以在控件视区点取任意一点做为圆心,再动态点取半径绘制圆. 主要用到函数说明: _DMxDrawX::DrawCircle 绘制一个圆.详细说明如下 ...
- Bzoj4899 记忆的轮廓
B. 记忆的轮廓 题目描述 通往贤者之塔的路上,有许多的危机.我们可以把这个地形看做是一颗树,根节点编号为1,目标节点编号为n,其中1-n的简单路径上,编号依次递增,在[1,n]中,一共有n个节点.我 ...
- 尝试用React写几个通用组件 - 带搜索功能的下拉列表,开关切换按钮,弹出框
尝试用React写几个通用组件 - 带搜索功能的下拉列表,开关切换按钮,弹出框 近期正在逐步摸索学习React的用法,尝试着写几个通用型的组件,整体项目还是根据webpack+react+css-me ...
- [Python3网络爬虫开发实战] 1.9.5-Scrapyrt的安装
Scrapyrt为Scrapy提供了一个调度的HTTP接口,有了它,我们就不需要再执行Scrapy命令而是通过请求一个HTTP接口来调度Scrapy任务了.Scrapyrt比Scrapyd更轻量,如果 ...
- 集训第四周(高效算法设计)J题 (中途相遇法)
Description The SUM problem can be formulated as follows: given four lists A, B, C, D<tex2html_ ...
- ExecutorService 线程池 (转发)
1.ExecutorService java.util.concurrent.ExecutorService 接口.用来设置线程池并执行多线程任务.它有以下几个方法. Future<?> ...
- 我们参与投资36Kr股权众筹项目“易途8”的决策过程
背景 中文接机.中文送机.中文包车. 当地玩乐 最大的竞争对手:皇包车,15年9月A轮 其它对手:唐人接等,订单量无法和 皇包车.易途8比. 看好理由 1.旅游行业和境外自由行,是 ...
- jQuery_DOM学习之------创建节点及节点属性
DOM创建节点及节点属性 一.创建新的节点并添加到dom中 dom 节点创建的过程(创建节点<元素.属性.文本等>.添加节点的属性.加入到文档中) jQuery创建元素节点的方法: 创建元 ...
- xtu Shortest Path
Acceteped : 23 Submit : 61 Time Limit : 5000 MS Memory Limit : 65536 KB Description 题目描述 N(3≤N≤1 ...
- MVC系统学习8——AsyncController
关于为什么使用异步Controller,这里不做备忘,三岁小孩都懂.主要的备忘是如何使用AsyncController. //这个action以Async结尾,并且返回值是void public vo ...