QStateMachine Class Reference
[QtCore module]
该QStateMachine类提供了一个分层有限状态机。More…
继承QState。
Types
enum Error { NoError, NoInitialStateError, NoDefaultStateInHistoryStateError, NoCommonAncestorForTransitionError }
enum EventPriority { NormalPriority, HighPriority }
enum RestorePolicy { DontRestoreProperties, RestoreProperties }
class **[SignalEvent]($docs-index.htm)**
class **[WrappedEvent]($docs-index.htm)**
Methods
__init__ (self, QObject parent = None)
addDefaultAnimation (self, QAbstractAnimation animation)
addState (self, QAbstractState state)
bool cancelDelayedEvent (self, int id)
clearError (self)
list-of-QAbstractState configuration (self)
list-of-QAbstractAnimation defaultAnimations (self)
Error error (self)
QString errorString (self)
bool event (self, QEvent e)
bool eventFilter (self, QObject watched, QEvent event)
RestorePolicy globalRestorePolicy (self)
bool isAnimated (self)
bool isRunning (self)
onEntry (self, QEvent event)
onExit (self, QEvent event)
int postDelayedEvent (self, QEvent event, int delay)
postEvent (self, QEvent event, EventPriority priority = QStateMachine.NormalPriority)
removeDefaultAnimation (self, QAbstractAnimation animation)
removeState (self, QAbstractState state)
setAnimated (self, bool enabled)
setGlobalRestorePolicy (self, RestorePolicy restorePolicy)
start (self)
stop (self)
Qt Signals
void started ()
void stopped ()
Detailed Description
该QStateMachine类提供了一个分层有限状态机。
QStateMachine是基于概念和符号 Statecharts。 QStateMachine是一部分The State Machine Framework。
状态机管理一组状态(即从继承的类QAbstractState)和转换(后裔QAbstractTransition)之间的状态,这些状态和转换定义一个状态图。一旦一个状态图已经建成,状态机可以执行它。 QStateMachine的执行算法是基于State Chart XML (SCXML)算法。该框架的overview给出了几种状态图,并建立它们的代码。
使用addState( )函数的顶级状态添加到状态机。国与删除removeState()函数。机器运行时拆卸状态是气馁。
之前可以对机器进行启动,initial state必须设置。初始状态是状态启动时,机器进入。然后,您可以start( )状态机。该started当进入初始状态( )信号被发射。
本机是事件驱动的,并保持自己的事件循环。活动通过张贴到机器postEvent( ) 。请注意,这意味着它异步执行,并且它不会没有运行事件循环的进展。你通常不会有事件发布到本机直接作为Qt的转换,例如,QEventTransition和它的子类,处理这个问题。但对于由事件触发的自定义转换,postEvent()是有用的。
状态机处理事件,并采取转换,直至顶层的最终状态进入,状态机,然后放出finished()信号。您也可以stop( )显式状态机。该stopped()信号在这种情况下被发射。
下面的代码片断显示了一个状态机单击按钮时,将完成:
[QPushButton](qpushbutton.html) button;
QStateMachine machine;
[QState]($docs-qstate.html) *s1 = new [QState]($docs-qstate.html)();
s1->assignProperty(&button, "text", "Click me");
[QFinalState]($docs-qfinalstate.html) *s2 = new [QFinalState]($docs-qfinalstate.html)();
s1->addTransition(&button, SIGNAL(clicked()), s2);
machine.addState(s1);
machine.addState(s2);
machine.setInitialState(s1);
machine.start();
此代码示例使用QState,它继承QAbstractState。该QState类提供了可用于设置属性和调用方法上的状态QObject当国家进入或退出秒。它还包含用于添加转场,例如方便的功能,QSignalTransitionS作为在这个例子。请参阅QState类描述进一步的细节。
如果遇到错误,机器会寻找一个error state,并且如果有,它会进入这种状态。可能发生的错误的类型由所述Error枚举。进入错误状态后,错误的类型,可以检索与error( ) 。当进入错误状态的状态图的执行不会停止。如果没有错误状态适用于在错误状态时,机器将停止执行和错误信息会被打印到控制台。
Type Documentation
QStateMachine.Error
该枚举类型定义了可以在运行时发生的状态机错误。当状态机在运行时遇到不可恢复的错误,它会设置返回的错误代码error( ) ,返回的错误信息errorString() ,并输入基于错误的情况下的错误状态。
Constant | Value | Description |
---|---|---|
QStateMachine.NoError |
0 |
没有发生错误。 |
QStateMachine.NoInitialStateError |
1 |
本机已进入QState儿童不具有初始状态集。这个错误的上下文是一个缺少初始状态的状态。 |
QStateMachine.NoDefaultStateInHistoryStateError |
2 |
本机已进入QHistoryState它不具有默认状态设置。这个错误的上下文是QHistoryState一个缺少默认状态。 |
QStateMachine.NoCommonAncestorForTransitionError |
3 |
机器已经选择了一个过渡,其源和目标是不一样的状态的树的一部分,并且因此是不一样的状态机的一部分。一般情况下,这可能意味着国家之一没有得到父母或添加到任何机器。这个错误的上下文是过渡的源状态。 |
See also setErrorState( ) 。
QStateMachine.EventPriority
该枚举类型指定使用发布到状态机的事件的优先级postEvent( ) 。
高优先级的活动正常优先级的事件之前处理。
Constant | Value | Description |
---|---|---|
QStateMachine.NormalPriority |
0 |
该事件具有正常的优先级。 |
QStateMachine.HighPriority |
1 |
该事件具有高优先级。 |
QStateMachine.RestorePolicy
这个枚举变量指定的恢复策略类型。恢复策略生效时,机器进入其中设置一个或多个属性的状态。如果恢复策略设置为RestoreProperties ,状态机将保存属性的原始值新值被设置之前。
后来,当机器或者进入不设置为给定的属性的值的状态下,该属性将被自动恢复到其初始值。
只有一个初始值将被保存为任何给定的属性。如果某个属性的值已经储存的状态机,它不会被复盖,直到该物业已成功恢复。
Constant | Value | Description |
---|---|---|
QStateMachine.DontRestoreProperties |
0 |
状态机应该不保存属性的初始值,并在以后恢复它们。 |
QStateMachine.RestoreProperties |
1 |
状态机应该保存属性的初始值,并在以后恢复它们。 |
See also QStateMachine.globalRestorePolicy和QState.assignProperty( ) 。
Method Documentation
QStateMachine.__init__ (self, QObject parent = None)
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
构造一个新的状态机具有给定parent。
QStateMachine.addDefaultAnimation (self, QAbstractAnimation animation)
添加一个默认animation应考虑的任何过渡。
QStateMachine.addState (self, QAbstractState state)
该state说法有它的所有权转移给Qt的。
将给定state这个状态机。国家变成了顶级的状态。
如果国家已经在不同的机器上,它首先会从旧机器中取出,然后加入到本机。
See also removeState()和setInitialState( ) 。
bool QStateMachine.cancelDelayedEvent (self, int id)
取消确定了在给定的延迟事件id。 ID应该是通过调用返回的值postDelayedEvent( ) 。返回True如果该事件被成功取消,否则返回False 。
Note:这个功能是thread-safe。
See also postDelayedEvent( ) 。
QStateMachine.clearError (self)
清除状态机的错误字符串和错误代码。
list-of-QAbstractState QStateMachine.configuration (self)
返回极大一致集的状态(包括并行和最终状态)的,这个状态机是目前。如果一个国家s
在配置中,它总是的情况下的父s
也是在C 。然而,请注意,机器本身不是配置的显式成员。
list-of-QAbstractAnimation QStateMachine.defaultAnimations (self)
返回默认的动画,将被视为对任何过渡的列表。
Error QStateMachine.error (self)
[
返回发生在状态机的最后一个错误的错误代码。
QString QStateMachine.errorString (self)
bool QStateMachine.event (self, QEvent e)
]($docs-qstatemachine.html#Error-enum)
从重新实现QObject.event( ) 。
bool QStateMachine.eventFilter (self, QObject watched, QEvent event)
从重新实现QObject.eventFilter( ) 。
RestorePolicy QStateMachine.globalRestorePolicy (self)
[
bool QStateMachine.isAnimated (self)
bool QStateMachine.isRunning (self)
返回是否该状态机正在运行。
](qstatemachine.html#RestorePolicy-enum)
QStateMachine.onEntry (self, QEvent event)
从重新实现QAbstractState.onEntry( ) 。
这个函数会调用start( )来启动状态机。
QStateMachine.onExit (self, QEvent event)
从重新实现QAbstractState.onExit( ) 。
这个函数会调用stop()停止状态机,并随后放出stopped()信号。
int QStateMachine.postDelayedEvent (self, QEvent event, int delay)
该event说法有它的所有权转移给Qt的。
帖子给定的event用于处理由该状态机中,用给定的delay以毫秒为单位。返回与延迟事件相关联的标识符,或-1,如果事件无法公布。
此函数立即返回。当延迟已过期,该事件将被添加到状态机的事件队列进行处理。状态机取事件的所有权,并删除它,一旦它已被处理。
您只能在状态机运行时发布事件。
Note:这个功能是thread-safe。
See also cancelDelayedEvent()和postEvent( ) 。
QStateMachine.postEvent (self, QEvent event, EventPriority priority = QStateMachine.NormalPriority)
该event说法有它的所有权转移给Qt的。
帖子给定的event的给定priority处理这个状态机。
此函数立即返回。该事件被添加到状态机的事件队列中。事件在张贴的顺序处理。状态机取事件的所有权,并删除它,一旦它已被处理。
您只能在状态机运行时发布事件。
Note:这个功能是thread-safe。
See also postDelayedEvent( ) 。
QStateMachine.removeDefaultAnimation (self, QAbstractAnimation animation)
移除animation从预设的动画列表中。
QStateMachine.removeState (self, QAbstractState state)
该state争论
删除给定的state从这个状态机。状态的状态机版本的所有权。
See also addState( ) 。
QStateMachine.setAnimated (self, bool enabled)
QStateMachine.setGlobalRestorePolicy (self, RestorePolicy restorePolicy)
QStateMachine.start (self)
这种方法也是一个Qt槽与C + +的签名void start()
。
启动这个状态机。机器将重置它的配置和过渡到初始状态。当最后的顶级状态(QFinalState)输入时,机器会发出的finished()信号。
Note:状态机将不无运行事件循环,如主应用程序事件循环运行开始QCoreApplication.exec()或QApplication.exec( ) 。
See also started( )finished( )stop()和initialState( ) 。
QStateMachine.stop (self)
这种方法也是一个Qt槽与C + +的签名void stop()
。
停止该状态机。状态机将停止处理事件,然后放出stopped()信号。
Qt Signal Documentation
void started ()
这是该信号的默认超载。
当状态机进入初始状态(这个信号被发射QStateMachine.initialState) 。
See also QStateMachine.finished()和QStateMachine.start( ) 。
void stopped ()
这是该信号的默认超载。
这个信号被发射时,状态机已经停止。
See also QStateMachine.stop()和QStateMachine.finished( ) 。