zoukankan      html  css  js  c++  java
  • 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的后代又具有属性的。只不过用于界面是最容易理解罢了。

  • 相关阅读:
    截取最后一个下划线前面的字符串
    jqgrid加载本地数据功能
    Android、Ios手机端字体根据屏幕分辨率自适应的方法,使用rem和px的区别
    js获取8个月前时间,1天前时间
    手机端/pc端 弹出后,禁止底部页面滚动方法
    列表左右滚动
    jQuery点击隐藏点击显示,计算高度,位置,给当前加上焦点,其他去掉焦点
    工厂模式浅析
    教你看懂UML类图
    Rpc基础篇
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/13897026.html
Copyright © 2011-2022 走看看