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

QML中的state 状态的更多相关文章

  1. 在vue组件中使用vuex的state状态对象的5种方式

    下面是store文件夹下的state.js和index.js内容 //state.js const state = { headerBgOpacity:0, loginStatus:0, count: ...

  2. qt qml中PropertyAnimation的几种使用方法

    qml文章 qt qml中PropertyAnimation的几种使用方法 动画应用场景有以下几种: 首先如果一个Rectangle.动画是要改变它的x和y值 1,Rectangle一旦被创建,就要移 ...

  3. React Native知识11-Props(属性)与State(状态)

    一:Props(属性) 大多数组件在创建时就可以使用各种参数来进行定制.用于定制的这些参数就称为props(属性).props是在父组件中指定,而且一经指定,在被指定的组件的生命周期中则不再改变 通过 ...

  4. C++设计模式-State状态模式

    State状态模式作用:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. UML图如下: State类,抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为. ...

  5. 程序设计模式 —— State 状态模式

    我应该如何阅读? 本文将使用优雅的文字风格来告诉你什么是状态模式. 注意: 1.在阅读本文之前请保证你已经掌控了 面对对象的思想与 多态的基本概念,否则将难以理解. 2.本文实现将用C++实现,你不一 ...

  6. Spark Streaming揭秘 Day14 State状态管理

    Spark Streaming揭秘 Day14 State状态管理 今天让我们进入下SparkStreaming的一个非常好用的功能,也就State相关的操作.State是SparkStreaming ...

  7. 设计模式 ( 十八 ):State状态模式 -- 行为型

    1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ellse语句来做状态判断来进行不同情况的处理.但是对 ...

  8. 关于props和state以及redux中的state

    React的数据模型分为共有数据和私有数据,共有数据可以在组件间进行传递,私有数据为当前组件私有.共有数据在React中使用props对象来调用,它包含标签所有的属性名称和属性值,props对象有三个 ...

  9. Vuex state 状态浅解

    对于Vuex中的state里面的理解总是有些欠缺,机制似乎理解了.但是还有很多的不足,在这就先浅谈下自己的理解. vuex 机制中,定义了全局Store,在各个vue组件面的this.$store指向 ...

随机推荐

  1. [NOIP2017]列队 离线+SBT

    [NOIP2017]列队 题目描述 Sylvia 是一个热爱学习的女♂孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有n×m名学生,方阵 ...

  2. 打包签名时出现Conversion to Dalvik format failed with error 1

    今天在导出签名APK时,居然出现了“Conversion to Dalvik format failed with error 1” 于是,我习惯性地“Project”->“Clean”,把工程 ...

  3. JPA criteria 查询:类型安全与面向对象

    参考:https://my.oschina.net/zhaoqian/blog/133500 一.JPA元模型概念,及使用 在JPA中,标准查询是以元模型的概念为基础的.元模型是为具体持久化单元的受管 ...

  4. Code Forces 21 A(模拟)

    A. Jabber ID time limit per test 0.5 second memory limit per test 256 megabytes input standard input ...

  5. 在iOS模拟器上安装程式的ios-sim

    针对iOS装置进行开发时,绝大部分开发者采用的工具都是官方的Xcode.问题是负责图像设计和开发管理人员,却不一定熟悉Xcode的操作,这时ios-sim便是一个解决方案. 曾经从事iOS开发的朋友, ...

  6. Struts2中获取Web元素request、session、application对象的四种方式

    我们在学习web编程的时候,一般都是通过requet.session.application(servletcontext)进行一系列相关的操作,request.session.和applicatio ...

  7. 分享:宽恕的艺术 Forgive

    宽恕的艺术 To forgive may be divine, but no one ever said it was easy. 宽恕是神圣的,但是没有人说很容易做到宽恕别人. When someo ...

  8. HDU3231 Box Relations——三维拓扑排序

    HDU3231 Box Relations 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3231 题目意思:在一个三维空间上有一些棱和坐标轴平行的立方 ...

  9. iOS 内存管理(转载)

     N久没维护这个博客了,从开始接触编程到现在已经三四年了.不太习惯写博客,这应该是个不好的习惯.所以从哪哪天开始,我得改变自己 (:       . 文采不太好,因此很多的文章都会借鉴他人的,但是我一 ...

  10. MySQL给一个字段递增赋值

    https://blog.csdn.net/kriszhang/article/details/72125203 首先设置一个变量,初始值为0: set @r:=0; 1 然后更新表中对应的ID列: ...