QML中你所不知道的state

简介:

QML中你所不知道的state


       最后一次写QML已经是2010年了,最近由于产品需要,重拾QML。之前nokia给我们培训QML的时候,对于state这个概念理解的不是很透彻。最近在做产品前期的QML热身,发现QML中的state有一种神奇的功能:历史记忆效应

       state核心就是体现了一个状态机的原理,处在某一状态去改变某些属性以达到目的。关于state如何使用的我这里就不说了,看看nokia的QML文档就知道state如何使用。我这里主要讲讲state的历史记忆效应。


从代码开始入手说起:




import QtQuick 1.0

Rectangle {
    width: 360
    height: 360
    color: "#E4F3F9"


    Rectangle{

        id: innerRec
        width: 60
        height: 30
        color: "#59A72C"
        state: "pre"

        anchors.centerIn: parent

        Text {
            id: txt
            anchors.centerIn: parent
            text: "Hello QML"
        }


        MouseArea{
            anchors.fill: parent

            onClicked: if (innerRec.state == "pre")innerRec.state = "tag";else innerRec.state = "pre"

        }

        states: [
            State {
                name: "tag"
                PropertyChanges {
                    target: innerRec;
                    color: "#5CB4DA"
                }
                PropertyChanges {
                    target: txt;
                    text: "Hello Qt"
                }
            }
        ]

    }
}

当我们第一次点击巨型区域的时候,该区域会变色,并字体变为“Hello Qt”。按照设计在点击一次恢复到原始状态,也就是“Hello QML”包括颜色。

比较正常的思维就是在点击一次通过priorityChange把颜色以及字体更改回去。

其实,不用。只需要把state属性更改为原始的“pri”就可以。因为每个state,包括原始的state,都会将当前QML对象的属性记录下来,这些属性包括颜色,文字,大小等等。

所以,上面的代码就能实现不断点击不断交替切换的效果。

效果如下:




目录
相关文章
|
资源调度
时间轴组件react-native-step-indicator使用
时间轴组件react-native-step-indicator使用
757 0
时间轴组件react-native-step-indicator使用
|
JavaScript
element-ui(vue版)使用switch时change回调函数中的形参传值问题
element-ui(vue版)使用switch时change回调函数中的形参传值问题
160 0
|
7月前
|
存储 前端开发 API
第六章 react组件实例中三大属性之State
第六章 react组件实例中三大属性之State
|
4月前
|
JavaScript 前端开发 C++
如何理解 QML_ELEMENT QML_SINGLETON staic Foo *create(QQmlEngine *, QJSEngine *){return s instance; }
如何理解 QML_ELEMENT QML_SINGLETON staic Foo *create(QQmlEngine *, QJSEngine *){return s instance; }
67 2
|
4月前
|
开发者
Flutter笔记:Widgets Easier组件库 - 使用标签(Tag)
Flutter笔记:Widgets Easier组件库 - 使用标签(Tag)
134 0
|
4月前
|
开发者
Flutter笔记:Widgets Easier组件库(12)使用消息吐丝(Notify Toasts)
Flutter笔记:Widgets Easier组件库(12)使用消息吐丝(Notify Toasts)
84 0
|
7月前
|
设计模式 开发框架 算法
【QML 创建界面】QML界面的动态创建及其其他方法 (Dynamic Creation of QML Interfaces and Other Methods)
【QML 创建界面】QML界面的动态创建及其其他方法 (Dynamic Creation of QML Interfaces and Other Methods)
772 0
|
前端开发 JavaScript
React(一) —— 组件的创建与state
React(一) —— 组件的创建与state
|
存储 前端开发 JavaScript
React 三大属性之state的使用详解
React 三大属性之state的使用详解
107 0