Home · All Classes · Modules  · QSS HELP  · QSS 案例 · VER007 HOME

QStateMachine Class Reference
[QtCore module]

该QStateMachine类提供了一个分层有限状态机。More...

继承QState

Types

Methods

Qt Signals


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 button;

 QStateMachine machine;
 QState *s1 = new QState();
 s1->assignProperty(&button, "text", "Click me");

 QFinalState *s2 = new QFinalState();
 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.globalRestorePolicyQState.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)

从重新实现QObject.event( ) 。

bool QStateMachine.eventFilter (self, QObject watched, QEvent event)

从重新实现QObject.eventFilter( ) 。

RestorePolicy QStateMachine.globalRestorePolicy (self)

bool QStateMachine.isAnimated (self)

bool QStateMachine.isRunning (self)

返回是否该状态机正在运行。

start( )stop( )

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()信号。

See also stopped()和start( ) 。


Qt Signal Documentation

void started ()

这是该信号的默认超载。

当状态机进入初始状态(这个信号被发射QStateMachine.initialState) 。

See also QStateMachine.finished()和QStateMachine.start( ) 。

void stopped ()

这是该信号的默认超载。

这个信号被发射时,状态机已经停止。

See also QStateMachine.stop()和QStateMachine.finished( ) 。




PyQt 4.10.3 for X11 Copyright © Riverbank Computing Ltd and Nokia 2012 Qt 4.8.5