QState类为QStateMachine类提供状态。一个QState对象可以有子状态,也可以有转向其他状态的转换。状态的ChildMode属性用来设置子状态之间的关系。属性值有ExclusiveStates和ParallelStates,若为ExclusiveStates,表示子状态之间是互斥的,必须调用setInitialState()函数设置初始状态,当转换的目标是父状态时,状态机还需知道要转换到哪个子状态中。若值为ParallelStates,各个子状态之间是平行的关系,当父状态进入到一个状态,所有的子状态都进入到这一状态,当进入到一个最终子状态时,状态发出finished()信号[9]。 一个状态机的状态图如图1所示,s1,s2和s3分别表示状态机的3个状态,黑点指示的状态s1为初始状态,当接收到button.clicked信号,即用户点击按钮时,状态发生转换,并在这3个状态中循环切换。
2.2 QStateMachine类
QStateMachine类建立在状态图概念的基础上,提供了一个分层的有限状态机。状态机体系的整体继承关系主要分为3部分,分别是:
(1)负责存储状态的QAbstractState接口;
(2)负责对信号进行处理的QAbstractTransition接口;
(3)为状态机类提供信号事件的QEvent接口。
状态机管理一组继承自QAbstractState类的状态和继承自QAbstractTransition类的转换,这些状态和转换确定一个状态图。状态图建立后,状态机即可执行它。
为状态机添加状态使用addSta
2.2 QStateMachine类
QStateMachine类建立在状态图概念的基础上,提供了一个分层的有限状态机。状态机体系的整体继承关系主要分为3部分,分别是:
(1)负责存储状态的QAbstractState接口;
(2)负责对信号进行处理的QAbstractTransition接口;
(3)为状态机类提供信号事件的QEvent接口。
状态机管理一组继承自QAbstractState类的状态和继承自QAbstractTransition类的转换,这些状态和转换确定一个状态图。状态图建立后,状态机即可执行它。
为状态机添加状态使用addSta