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;
      
  • 10
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

foruok

你可以选择打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值