找回密码
 立即注册
Qt开源社区 门户 查看内容

QML中的state 状态

2019-2-9 10:19| 发布者: admin| 查看: 1436| 评论: 0

摘要: 作者:Qt编程 QML中的状态其实很好理解,任何事物在某一事件都是有一个状态的。比如你看到的一个窗口,这个时候里面的文字和图片正处于某个状态中。比如一个超链接,你点击了,发现颜色变了,你按了Ctrl+A,整个窗 ...
作者:Qt编程

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

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

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

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


  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.     } 







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

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

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

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


-------------------------------------------------------------------------
我们尊重原创,也注重分享,如若侵权请联系qter@qter.org。
-------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了