博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QML中的state 状态
阅读量:4971 次
发布时间:2019-06-12

本文共 1143 字,大约阅读时间需要 3 分钟。

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

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

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

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

 

[plain]   
 
 
  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属性。当它为真,表示你下次更改其它属性的时候,它将会还原之前的更改。当它为假,之前的更改会被保留。

转载于:https://www.cnblogs.com/senior-engineer/p/6685832.html

你可能感兴趣的文章
Using the ForeFront Identity Manager to Configure SharePoint 2010’s User Profile Sync Service
查看>>
Spring MVC总结1
查看>>
过滤器模式(Filter Pattern)
查看>>
背包问题
查看>>
arts-week1
查看>>
与孩子一起学编程15章
查看>>
面试概率问题
查看>>
以对象管理资源——C++智能指针auto_ptr简介
查看>>
R语言学习笔记:因子
查看>>
修复SharePoint 2013 Search 拓扑错误
查看>>
java基础54 网络通讯的三要素及网络/网页编程的概述
查看>>
用Castle.Core实现方法拦截器
查看>>
《构建之法》读书随笔
查看>>
U-Boot编译过程完全分析
查看>>
SpringBoot集成Quartz实现定时器
查看>>
Query Performance Tuning (SQL Server Compact)
查看>>
RecyclerView 详解
查看>>
<<asp.net 3.5揭秘>>第7章.使用用户控件创建定制控件
查看>>
Yii中利用filters来控制访问
查看>>
PHP中Notice: unserialize(): Error at offset of bytes in on line 的解决方法
查看>>