QML程序架构设计(二)状态机应用
来源:互联网 发布:csgo淘宝买枪 编辑:程序博客网 时间:2024/06/08 01:54
状态机刚使用,不太熟,如有错误,欢迎指出。
在qml中的界面程序中,界面切换有的比较复杂,使用状态机则会清晰一点。在使用过程中,发现状态机的使用有讲究。
状态机使用1:
对于同一个对象,要使用状态机改变他的状态,,需要放在该对象的内部,然后通过状态的切换,就可以改变器任意的属性,此时,状态的name是有用的,不同的name对应不同的状态。
import QtQuick 2.7import QtQuick.Controls 2.0import QtQuick.Layouts 1.0Rectangle { visible: true width: 640 height: 480 property int i:0 property int j:0 property int k:0 Rectangle { id:q1// state:"w1" width: 50 height: 50 color: "blue" anchors{top:parent.top;left:parent.left}// visible: j visible: true states: [ State { name: "w1" PropertyChanges{ target:q1 color:"red" }// when:{i%2 === 1}// StateChangeScript{// name:"u1"// script: {// q1.visible = true// q2.visible = false// q1.color = "red"// }// } }, State{ name: "w2" when:{i%2 === 0} PropertyChanges{ target:q1 color:"blue" }// StateChangeScript{// name:"u2"// script: {// q1.visible = false// q2.visible = true// q2.color = "black"// }// } } ] }// Rectangle// {// id:q2// state:"w2"// width: 50// height: 50// color: "blue"// anchors{top:parent.top;left:parent.left;leftMargin: 50}// visible: k// } MouseArea { anchors.fill: parent onClicked: { i += 1 if(i%2) { q1.state = "w1" } else { q1.state = "w2" } console.log(i%2) } }}
状态机使用2:
如果要改变多个对象的状态,或者说多个对象之间进行状态的切换,则需要将state放在最外层,此时,不能使用name来进行状态切换,而要使用when的满足条件来进行触发;不可以使用ProperChange来改变不同的对象的属性,而要使用执行脚本StateChangeScript来进行状态的属性切换。
如果脚本逻辑较复杂,还可以封函数进行调用。
import QtQuick 2.7import QtQuick.Controls 2.0import QtQuick.Layouts 1.0Rectangle { visible: true width: 640 height: 480 property int i:0 property int j:0 property int k:0 states: [ State { name: "w1" when:{i%2 === 1} StateChangeScript{ name:"u1" script: { q1.visible = true q2.visible = false q1.color = "red" } } }, State{ name: "w2" when:{i%2 === 0} StateChangeScript{ name:"u2" script: { q1.visible = false q2.visible = true q2.color = "black" } } } ] Rectangle { id:q1 state:"w1" width: 50 height: 50 color: "blue" anchors{top:parent.top;left:parent.left} visible: j } Rectangle { id:q2 state:"w2" width: 50 height: 50 color: "blue" anchors{top:parent.top;left:parent.left;leftMargin: 50} visible: k } MouseArea { anchors.fill: parent onClicked: { i += 1 if(i%2) { q1.state = "w1" } else { q1.state = "w2" } console.log(i%2) } }}
这样,方法二就可以应用在QML程序架构设计(一)中的第二中使用状态机的方法中了。但是这里还会存在一个隐患,当界面切套复杂,深层的子界面的id是很不好获取的。
阅读全文
0 0
- QML程序架构设计(二)状态机应用
- QML程序架构设计(一)
- ExtJS应用架构设计(二)
- ExtJS应用架构设计(二)
- ExtJS应用架构设计(二)
- 系统设计之 状态机(二)
- 状态机(二)
- 状态机(二):Verilog状态机实现
- Qt Qml状态机框架
- 服务器架构设计3------状态机的使用
- 状态机在类设计中的应用
- 棋牌游戏服务器架构: 详细设计(二) 应用层设计
- 棋牌游戏服务器架构: 详细设计(二) 应用层设计
- Qt状态机实例 (二)
- Qt状态机实例 (二)
- 自动售饮机设计 (状态机)
- 设计模式(三)状态机
- QQuickImageProvider在QML设计中的应用
- Head First JS阅读笔记之动态数据
- CSS 基础语法有哪些?
- opencv访问(Mat)图像的像素方法汇总
- redis界面客户端的简单安装与使用
- 3·深入MNIST
- QML程序架构设计(二)状态机应用
- maven编译spark源码(spark-2.3.0)
- Linux mount 硬盘挂载
- 转载:http://blog.csdn.net/u010128736/ ORB-SLAM2详解(二)代码逻辑
- 归并排序
- LitePal——Android数据库框架完整使用手册
- Java 设计模式 之 代理模式与装饰模式的区别
- c++一般函数与虚函数的区别
- Webservice 入门级教程(带图片)【转载】