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

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

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

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

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

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

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

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

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

最新文章

  1. 全文检索原理以及es
  2. eclipse无法创建Server
  3. navicat for mysql 10.1.7注册码
  4. [Hadoop入门] - 2 ubuntu安装与配置 hadoop安装与配置
  5. postgresql 入门(含java、scala连接代码)
  6. XAML中ContentControl,ItemsControl,DataTemplate之间的联系和区别
  7. Android(java)学习笔记143:android提供打开各种文件的API接口:setDataAndType
  8. Android JNI和NDK关系
  9. haslayout和BFC
  10. 一个用 Cumulative Penalty 培训 L1 正规 Log-linear 型号随机梯度下降
  11. Eclipse用法和技巧十三:自动生成的TODO注释1
  12. Oracle SQL Lesson (9) - 操作数据(增删改)
  13. MySQL使用和操作总结
  14. 51nod OJ P1000 A+B
  15. centos7 mongodb安装
  16. 线程池threadPools
  17. 从零开始学习html(六)开始学习CSS,为网页添加样式
  18. HttpSenderUtil向指定 URL 发送POST方法的请求
  19. android-------- 强引用、软引用、弱引用、虚引用使用
  20. maven ,添加加密算法 apache commons-codec.jar 包

热门文章

  1. poj_2486 动态规划
  2. 转载 Mixed Content Page
  3. Spring和quartz整合的入门使用教程
  4. 160418、ztree权限菜单
  5. CMS 收集器整理
  6. C++中,将单精度浮点数转换成2进制数
  7. Requset和Response中的乱码问题
  8. window.location下的属性说明
  9. ERR_PTR,PTR_ERR还有IS_ERR函数详解
  10. c#自定义控件做漂亮的列表