首页 > 其他分享 >Qml类型:State 状态

Qml类型:State 状态

时间:2023-01-31 08:22:10浏览次数:45  
标签:状态 ... states State Qml 类型 rootRect PropertyChanges

Qml类型:State 状态

1、定义一个状态
2、状态名称
3、绑定目标
4、触发状态改变


我们来写一个状态转换器。

1、定义一个状态

一个状态的定义可以声明为states: State { ... },也可以声明为:states: [ State { ... } ]两种形式。

多个状态可以声明如下的形式:

states: [
State { ... }, // 状态1
State { ... }, // 状态2
...
]
1
2
3
4
5
多个状态的声明,其实就是声明了类似一个数组,[和]直接放入的是数组元素,那么当声明一个状态时也可以使用这种形式,即数组元素为一个。

2、状态名称

对于每一个状态State,需要给他取一个独一无二的名称(字符串类型)。

3、绑定目标

对于每一个状态State,需要定义一个或者多个PropertyChanges。

PropertyChanges需要一个target,用来绑定一个qml对象。比如如下例子:

states: State {
name: "resized"; when: mouseArea.pressed
PropertyChanges {
target: rect;
color: "blue";
height: container.height
}
}
1
2
3
4
5
6
7
8
上述的color、height等都是rect的属性(rect是一个Rectangle类型的id)。

当切换到当前状态时,会触发PropertyChanges中目标控件的color、height的变化(颜色变成蓝色、高度变成和容器高度一致)。

4、触发状态改变

有两种方式触发状态的改变:

一个是:在State中定一个when,当发生该事件时触发当当前状态。如上述的when: mouseArea.pressed,当点击按下时触发。

另一个是:主动改变在定义states的控件的state属性,该属性在Item中定义,因此只要是控件类型继承自Item的都存在这个属性。

如下即是这种方式。在onExited、onPressed的时候主动改变rootRect.state的值,触发状态的切换,进而改变rootRect的opacity属性。

Rectangle{
id: rootRect
color: "transparent"
state: "normal"
MouseArea {
onExited: {
rootRect.state = "normal"
}
onPressed: {
rootRect.state = "pressed"
}
}
states: [
State {
name: "normal"
PropertyChanges{ target: rootRect; opacity: 0.6 }
},
State {
name: "pressed"
PropertyChanges{ target: rootRect; opacity: 1 }
}
]
}
————————————————
原文链接:https://blog.csdn.net/tanxuan231/article/details/124990331

 

标签:状态,...,states,State,Qml,类型,rootRect,PropertyChanges
From: https://www.cnblogs.com/im18620660608/p/17077712.html

相关文章

  • Qml中使用动画Animation
    Animation是Qml中所有动画类的基类。Qml中动画的分类PropertyAnimation:改变控件的属性来产生动画。NumberAnimation:专门改变数字类型的动画,效率优于PropertyAnimation......
  • 图解redis的5种数据类型底层原理
    redis的5种数据类型以及其底层实现redis是KV(key-valuepair)存储,不管是K还是V,底层都是对象(object组成)的,其中K是一个字符串对象(stringobject),V分别有我们常听说的5种......
  • 数据类型
    数据类型基本数据类型整数4个intnum1=10;//最常用bytenum2=20;shortnum3=30;longnum4=30L;//long类型要加L小数2个:浮点数floatnum5=50.1F;//flo......
  • java 两个时间类型的参数相减,得到相差的天数
    如下代码演示当天时间减去一个时间参数获得两者之间相差的天数//获得Date类型的参数DatestartTime=entity.getCrateTime();DateendTime=newDate(System.currentT......
  • python怎么做类型标注
    文章目录​​1.为变量做类型标注​​​​1.1简单的数据类型​​​​1.2使用Optional​​​​1.3使用Union​​​​1.4为容器类型做标注​​​​1.4.1为集合做标注​......
  • python 中异常类型总结
    异常类型:异常名称描述BaseException       所有异常的基类SystemExit          解释器请求退出KeyboardInterrupt    用户中断......
  • 最全车牌识别,支持14种中文车牌类型
    最全车牌识别最全车牌识别算法,支持14种中文车牌类型。项目使用纯Java开发,免去使用Python带来的服务不稳定性。欢迎大家贡献代码,如果你觉得项目还不错,请给个star。......
  • 可空类型转换为普通的类型
    在日常开发中,我们经常遇到可空类型赋值给另一个变量,会提示我们无法将Int?隐式转换为int,如图所示图1解决方案:通过Value属性可以把可空类型转换为普通的类型,如下图所示......
  • 常见ContentType类型
    ".*"="application/octet-stream"".001"="application/x-001"".301"="application/x-301"".323"="text/h323"".906"="application/x-906"".907"="......
  • ABAP 创建数据类型的三种方式,各自的使用场合和优缺点辨析试读版
    本教程之前的步骤,介绍了ABAP数据字典即SE11这个事务码里能够创建三种不同的数据类型:DataElementStructureTableType以及这三种数据类型各自的使用场合:84.AB......