QML State类型,实现状态切换,图片切换等效果(一)

QML中所有基于Item的对象都有一个state属性,依赖于状态驱动的情况下,都可以用State类型的一组属性设置:
1. 显示一些组件而隐藏其他组件;
2. 为用户呈现不同的动作;
3. 开始、停止或者暂停动画;
4. 执行一些需要在新的状态中使用的脚本;
5. 显示一个不同视图或者画面;
举例一:

import QtQuick 2.2

Item {
    width: 300; height: 300

    Rectangle {
        id: signal; anchors.fill: parent; color: "green"
        state: "WARNING"

        Image {id: img; anchors.centerIn: parent;
                source: "warning.png"}

        states: [
            State {
                name: "WARNING"
                PropertyChanges { target: signal; color: "green"}
                PropertyChanges { target: img; source: "warning.png"}
            },
            State {
                name: "CRITICAL"
                PropertyChanges { target: signal; color: "red"}
                PropertyChanges { target: img; source: "critical.png"}
            }
        ]
    }

    Image {
        id: signalswitch
        width: 22; height: 22
        source: "switch.png"

        MouseArea {
            anchors.fill: parent
            onClicked: {
                if (signal.state == "WARNING")
                    signal.state = "CRITICAL"
                else
                    signal.state = "WARNING"
            }
        }
    }
}

运行效果:
这里写图片描述
点击刷新按钮后,状态切换
这里写图片描述
代码地址:https://download.csdn.net/download/hp_cpp/10507189
去掉刷新按钮:

import QtQuick 2.2

Item {
    width: 300; height: 300

    Rectangle {
        id: signal; anchors.fill: parent; color: "green"
        state: "WARNING"

        Image {id: img; anchors.centerIn: parent;
                source: "warning.png"}

        states: [
            State {
                name: "WARNING"
                PropertyChanges { target: signal; color: "green"}
                PropertyChanges { target: img; source: "warning.png"}
            },
            State {
                name: "CRITICAL"
                PropertyChanges { target: signal; color: "red"}
                PropertyChanges { target: img; source: "critical.png"}
            }
        ]

        MouseArea {
            anchors.fill: parent
            onClicked: {
                if (signal.state == "WARNING")
                    signal.state = "CRITICAL"
                else
                    signal.state = "WARNING"
            }
        }
    }
}

点击图片后,直接切换。这样就可以实现自己需要的功能,比如两张图片,点击后切换。这在密码框的小眼睛,点击后,隐藏密码和显示密码进行切换。
下一篇,将介绍默认状态和when属性,简化以上代码。实现的效果可以是,鼠标点击切换状态,当鼠标不点击,就恢复默认状态。这样就给我们提供了思路:按钮的鼠标按下、经过切换状态(透明度、图片、形状等),其他时候显示按钮正常状态。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值