QML中的state 状态
QML中的状态其实很好理解,任何事物在某一事件都是有一个状态的。
比如你看到的一个窗口,这个时候里面的文字和图片正处于某个状态中。比如一个超链接,你点击了,发现颜色变了,你按了Ctrl+A,整个窗体好像被蒙上了一层布,这也是状态的改变。所有的一切都是状态。
因此,QT提供这个功能。比如你想要变换文本的颜色,你会怎么做?在单击事件中进行响应是可以的。那如果是每一次单击都是要变色呢(不是随机颜色)?那你的槽函数代码会非常庞大。因为我们可以事先定义好一些状态,一旦触发,就让它更换状态就好了。
代码来得最直接了,下面是一个改变文本颜色的小例子,当鼠标松开,文本变蓝色。
- import QtQuick 2.6
- import QtQuick.Window 2.2
- Window {
- visible: true
- MouseArea {
- anchors.fill: parent
- onReleased: {
- textTest.state="blueStates"
- }
- }
- Text {
- id:textTest
- states: [
- State {
- name: "redStates"
- PropertyChanges {
- target: textTest
- color:"red"
- }
- },//注意这里的逗号
- State {
- name: "blueStates"
- PropertyChanges {
- target: textTest
- color:"blue"
- }
- }
- ]
- text: qsTr("Hello World")
- anchors.centerIn: parent
- state: "redStates"
- }
- }
这里有两个特殊的地方,第一就是states用的是中括号,[],而且每个state之间使用逗号来隔开;第二是PropertyChanges,这个元素用来对对象进行操作。如果你查看帮助文档,它的属性只有几个。那么我设置的color之类的是哪里来的呢?
在我们指定了target之后,就是对要操作的对象进行操作了,所以设置color之类的,其实是我们的text的属性。也就是说,你要对text的哪些属性进行更改,只要写在这个元素里面就可以了。当该状态被激活,那么它就会去帮你完成这个状态的变换。
很多人会有个疑问,我变换了颜色,如果我下次变换文字大小,那这个文本是蓝色还是红色呢?
PropertyChanges提供了一个restoreEntryValue属性。当它为真,表示你下次更改其它属性的时候,它将会还原之前的更改。当它为假,之前的更改会被保留。
QML中的state 状态的更多相关文章
- 在vue组件中使用vuex的state状态对象的5种方式
下面是store文件夹下的state.js和index.js内容 //state.js const state = { headerBgOpacity:0, loginStatus:0, count: ...
- qt qml中PropertyAnimation的几种使用方法
qml文章 qt qml中PropertyAnimation的几种使用方法 动画应用场景有以下几种: 首先如果一个Rectangle.动画是要改变它的x和y值 1,Rectangle一旦被创建,就要移 ...
- React Native知识11-Props(属性)与State(状态)
一:Props(属性) 大多数组件在创建时就可以使用各种参数来进行定制.用于定制的这些参数就称为props(属性).props是在父组件中指定,而且一经指定,在被指定的组件的生命周期中则不再改变 通过 ...
- C++设计模式-State状态模式
State状态模式作用:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类. UML图如下: State类,抽象状态类,定义一个接口以封装与Context的一个特定状态相关的行为. ...
- 程序设计模式 —— State 状态模式
我应该如何阅读? 本文将使用优雅的文字风格来告诉你什么是状态模式. 注意: 1.在阅读本文之前请保证你已经掌控了 面对对象的思想与 多态的基本概念,否则将难以理解. 2.本文实现将用C++实现,你不一 ...
- Spark Streaming揭秘 Day14 State状态管理
Spark Streaming揭秘 Day14 State状态管理 今天让我们进入下SparkStreaming的一个非常好用的功能,也就State相关的操作.State是SparkStreaming ...
- 设计模式 ( 十八 ):State状态模式 -- 行为型
1.概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理.最直接的解决方案是将这些所有可能发生的情况全都考虑到.然后使用if... ellse语句来做状态判断来进行不同情况的处理.但是对 ...
- 关于props和state以及redux中的state
React的数据模型分为共有数据和私有数据,共有数据可以在组件间进行传递,私有数据为当前组件私有.共有数据在React中使用props对象来调用,它包含标签所有的属性名称和属性值,props对象有三个 ...
- Vuex state 状态浅解
对于Vuex中的state里面的理解总是有些欠缺,机制似乎理解了.但是还有很多的不足,在这就先浅谈下自己的理解. vuex 机制中,定义了全局Store,在各个vue组件面的this.$store指向 ...
随机推荐
- 九度OJ 上剑指 offer 习题目录
<剑指Offer>面试题集收录汇总 面试题1 赋值运算符函数 不适合在线模式 面试题2 实现Singleton模式 不适合在线模式 面试题3 二维数组中的查找 已收录 面试题4 替换空格 ...
- iOS 开发之--使用AFNetWorking3.1.0上传单张/多张图片
在调试接口的时候,遇到一个问题,就是多张图片上传的时候,不管我上传多少张,只会上传成功最后一张,也就是说只有一张图片上传成功了,针对这个问题,通过查找资料,找到了原因,首先,在上传的过程中,我们获取到 ...
- Android弹出一项权限请求
Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(ena ...
- IOS7开发~新UI学起(三)
1.UITextView: A ) IOS7新增加的 UITextViewDelegate 方法: - (BOOL)textView:(UITextView *)textView shoul ...
- Spring学习笔记--自动检测
要使用自动检测,我们需要用到<context:annotation-scan>标签.<context:annotation-scan>元素除了完成与<context:an ...
- java基础---->Java中异常的使用(二)
这一篇博客用例子讲述一下异常的处理过程.那些 我们一直惴惴不安 又充满好奇的未来 会在心里隐隐约约地觉得它们是明亮的. 异常的执行过程 一.实例一:return语句 public class Exce ...
- Maven开发系统
Maven的优点: 自动从互联网中获取jar包,并实现了一步构建. pom.xml的配置 依赖管理(导入对应的jar包) 通过坐标(定位到仓库中的包的位置,并将jar包导入到项目中,如果版本升级,只需 ...
- Servlet------>jsp输出JavaBean
JavaBean是遵循特殊写法的java类 它通常具有如下特点: 1.这个java类必须具有一个无参的构造函数 2.属性必须私有化 3.私有化必须通过public类暴露给其他程序,而且方法的命名必须遵 ...
- hadoop运维问题记录
hadoop综合问题记录 1.hdfs无法启动 错误: 2018-04-25 14:36:09,293 - Retrying after 10 seconds. Reason: Execution o ...
- inode file 结构
inode位图(inode Bitmap) 和块位图类似,本身占一个块,其中每个bit表示一个inode是否空闲可用. inode表(inode Table) 我们知道,一个文件除了数据需要存储之外, ...