Lv.的博客

Qt状态机 QStateMachine

https://baijiahao.baidu.com/s?id=1626185034227877948&wfr=spider&for=pc

关于Qt状态机的介绍就懒得说了,网络上一搜一大堆,反正也看不懂。我关心的就是怎么使用,毕竟我只是一个编写应用程序的程序员。简单粗暴地理解一下状态机就是一个管理很多状态的机器。
组成
一个最简单的状态机应该包括状态机(QStateMachine)、状态(QState)和过渡(QAbstractTransition子类)。状态机就相当于一个容器,过渡就是将某一个状态切换到另一个状态(当然也可以不切换)。
使用
1. 状态(QState)设置好此状态下的各对象的属性。
2. 通过过渡指定它的目标状态。
3. 将状态添加到状态机中。
4. 状态机指定一个初始状态,然后调用start启动。
QState通过assignProperty来关联对象的属性。本例的意思就是在状态1的时候按钮的文本是small,大小为(50,,50)。在状态2时按钮的文本是big,大小为(100,100)。 在这里我们并没有创建QAbstractTransition子类的对象,而是调用QState的addTransition来添加状态的过渡,该函数的返回值就是一个QSignalTransition(QAbstractTransition的子类)对象。这个函数的意思就是通过按钮的clicked信号触发状态的转换。 最后创建一个状态机的对象把已经设置好的状态添加进去,设置好初始状态后启动即可。运行效果如下:

这里需要注意的是一个状态不止能绑定一个对象的属性,如果是这样的话那它存在的意义好像就不大了。在复杂界面中往往会遇到一个某一时刻很多控件的状态是固定的,通过手动一个一个去设置控件的状态会显得很麻烦,这时候状态机就能帮上大忙了。状态机设置一次就行了,代码简洁明了。还需要注意的一点是状态机也不止是用于界面上的,它也可以用于其他对象,只要是QObject的后代又具有属性的。只不过用于界面是最容易理解罢了。

posted @ 2020-10-29 15:32  Avatarx  阅读(808)  评论(0编辑  收藏  举报