• QML中的state 状态


    QML中的状态其实很好理解,任何事物在某一事件都是有一个状态的。

    比如你看到的一个窗口,这个时候里面的文字和图片正处于某个状态中。比如一个超链接,你点击了,发现颜色变了,你按了Ctrl+A,整个窗体好像被蒙上了一层布,这也是状态的改变。所有的一切都是状态。

    因此,QT提供这个功能。比如你想要变换文本的颜色,你会怎么做?在单击事件中进行响应是可以的。那如果是每一次单击都是要变色呢(不是随机颜色)?那你的槽函数代码会非常庞大。因为我们可以事先定义好一些状态,一旦触发,就让它更换状态就好了。

    代码来得最直接了,下面是一个改变文本颜色的小例子,当鼠标松开,文本变蓝色。

    [plain] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. import QtQuick 2.6  
    2. import QtQuick.Window 2.2  
    3.   
    4. Window {  
    5.     visible: true  
    6.       
    7.     MouseArea {  
    8.         anchors.fill: parent  
    9.         onReleased: {              
    10.             textTest.state="blueStates"  
    11.         }  
    12.     }  
    13.       
    14.     Text {  
    15.         id:textTest  
    16.         states: [  
    17.             State {  
    18.                 name: "redStates"  
    19.                 PropertyChanges {  
    20.                     target: textTest  
    21.                     color:"red"   
    22.                 }  
    23.             },//注意这里的逗号  
    24.             State {  
    25.                 name: "blueStates"  
    26.                 PropertyChanges {  
    27.                     target: textTest  
    28.                     color:"blue"  
    29.                 }  
    30.             }              
    31.         ]  
    32.         text: qsTr("Hello World")  
    33.         anchors.centerIn: parent  
    34.         state: "redStates"  
    35.     }  
    36. }  


    这里有两个特殊的地方,第一就是states用的是中括号,[],而且每个state之间使用逗号来隔开;第二是PropertyChanges,这个元素用来对对象进行操作。如果你查看帮助文档,它的属性只有几个。那么我设置的color之类的是哪里来的呢?

    在我们指定了target之后,就是对要操作的对象进行操作了,所以设置color之类的,其实是我们的text的属性。也就是说,你要对text的哪些属性进行更改,只要写在这个元素里面就可以了。当该状态被激活,那么它就会去帮你完成这个状态的变换。

    很多人会有个疑问,我变换了颜色,如果我下次变换文字大小,那这个文本是蓝色还是红色呢?

    PropertyChanges提供了一个restoreEntryValue属性。当它为真,表示你下次更改其它属性的时候,它将会还原之前的更改。当它为假,之前的更改会被保留。

  • 相关阅读:
    GPS时钟参考源(GPS同步时钟)电力系统探讨
    GPS对时系统(时间同步系统)建设才是电力基础
    NTP授时服务器(NTP时钟服务器)基本原理介绍
    NTP授时服务器(北斗授时产品)在广播电视系统里的应用
    GPS北斗授时设备共视对比及传输链路接口
    基于NTP时钟服务器的时间同步数据采集系统
    利用GPS或北斗卫星开发的一款NTP授时服务器
    GPS时钟系统(卫星时钟同步)才是智能变电站的基础建设
    PTP精密时钟服务器IEEE1588(V2.0)协议浅析
    电子时钟显示屏,时间同步显示,GPS时钟系统
  • 原文地址:https://www.cnblogs.com/senior-engineer/p/6685832.html
Copyright © 2020-2023  润新知