认识一下Qt状态机QStateMachine

 

文章可能被更新,最新地址:http://www.fearlazy.com/index.php/post/115.html

 

关于Qt状态机的介绍就懒得说了,网络上一搜一大堆,反正也看不懂。我关心的就是怎么使用,毕竟我只是一个编写应用程序的程序员。简单粗暴的理解一下状态机就是一个管理很多状态的机器。

    组成

    一个最简单的状态机应该包括状态机(QStateMachine)、状态(QState)和过渡(QAbstractTransition子类)。状态机就相当于一个容器,过渡就是将某一个状态切换到另一个状态(当然也可以不切换)。

    

    使用

    1. 状态(QState)设置好此状态下的各对象的属性。

    2. 通过过渡指定它的目标状态。

    3. 将状态添加到状态机中。

    4. 状态机指定一个初始状态,然后调用start启动。

    

    示例代码    

blob.png

从代码中可以看出QState通过assignProperty来关联对象的属性。本例的意思就是在状态1的时候按钮的文本是small,大小为(50,,50)。在状态2时按钮的文本是big,大小为(100,100)。  在这里我们并没有创建QAbstractTransition子类的对象,而是调用QState的addTransition来添加状态的过渡,该函数的返回值就是一个QSignalTransition(QAbstractTransition的子类)对象。这个函数的意思就是通过按钮的clicked信号触发状态的转换。 最后创建一个状态机的对象把已经设置好的状态添加进去,设置好初始状态后启动即可。运行效果如下:

dh3.gif

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

    

作者:fearlazy 名字由fear和lazy两个单词组成。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fearlazy

打赏是不可能的

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值