Home · All Classes · Modules · QSS HELP · QSS 案例 · VER007 HOME |
该QStateMachine类提供了一个分层有限状态机。More...
继承QState。
该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( ) 。当进入错误状态的状态图的执行不会停止。如果没有错误状态适用于在错误状态时,机器将停止执行和错误信息会被打印到控制台。
该枚举类型定义了可以在运行时发生的状态机错误。当状态机在运行时遇到不可恢复的错误,它会设置返回的错误代码error( ) ,返回的错误信息errorString() ,并输入基于错误的情况下的错误状态。
Constant | Value | Description |
---|---|---|
QStateMachine.NoError | 0 | 没有发生错误。 |
QStateMachine.NoInitialStateError | 1 | 本机已进入QState儿童不具有初始状态集。这个错误的上下文是一个缺少初始状态的状态。 |
QStateMachine.NoDefaultStateInHistoryStateError | 2 | 本机已进入QHistoryState它不具有默认状态设置。这个错误的上下文是QHistoryState一个缺少默认状态。 |
QStateMachine.NoCommonAncestorForTransitionError | 3 | 机器已经选择了一个过渡,其源和目标是不一样的状态的树的一部分,并且因此是不一样的状态机的一部分。一般情况下,这可能意味着国家之一没有得到父母或添加到任何机器。这个错误的上下文是过渡的源状态。 |
See also setErrorState( ) 。
该枚举类型指定使用发布到状态机的事件的优先级postEvent( ) 。
高优先级的活动正常优先级的事件之前处理。
Constant | Value | Description |
---|---|---|
QStateMachine.NormalPriority | 0 | 该事件具有正常的优先级。 |
QStateMachine.HighPriority | 1 | 该事件具有高优先级。 |
这个枚举变量指定的恢复策略类型。恢复策略生效时,机器进入其中设置一个或多个属性的状态。如果恢复策略设置为RestoreProperties ,状态机将保存属性的原始值新值被设置之前。
后来,当机器或者进入不设置为给定的属性的值的状态下,该属性将被自动恢复到其初始值。
只有一个初始值将被保存为任何给定的属性。如果某个属性的值已经储存的状态机,它不会被复盖,直到该物业已成功恢复。
Constant | Value | Description |
---|---|---|
QStateMachine.DontRestoreProperties | 0 | 状态机应该不保存属性的初始值,并在以后恢复它们。 |
QStateMachine.RestoreProperties | 1 | 状态机应该保存属性的初始值,并在以后恢复它们。 |
See also QStateMachine.globalRestorePolicy和QState.assignProperty( ) 。
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
构造一个新的状态机具有给定parent。
添加一个默认animation应考虑的任何过渡。
该state说法有它的所有权转移给Qt的。
将给定state这个状态机。国家变成了顶级的状态。
如果国家已经在不同的机器上,它首先会从旧机器中取出,然后加入到本机。
See also removeState()和setInitialState( ) 。
取消确定了在给定的延迟事件id。 ID应该是通过调用返回的值postDelayedEvent( ) 。返回True如果该事件被成功取消,否则返回False 。
Note:这个功能是thread-safe。
See also postDelayedEvent( ) 。
清除状态机的错误字符串和错误代码。
返回极大一致集的状态(包括并行和最终状态)的,这个状态机是目前。如果一个国家s在配置中,它总是的情况下的父s也是在C 。然而,请注意,机器本身不是配置的显式成员。
返回默认的动画,将被视为对任何过渡的列表。
返回发生在状态机的最后一个错误的错误代码。
从重新实现QObject.event( ) 。
从重新实现QObject.eventFilter( ) 。
返回是否该状态机正在运行。
从重新实现QAbstractState.onEntry( ) 。
这个函数会调用start( )来启动状态机。
从重新实现QAbstractState.onExit( ) 。
这个函数会调用stop()停止状态机,并随后放出stopped()信号。
该event说法有它的所有权转移给Qt的。
帖子给定的event用于处理由该状态机中,用给定的delay以毫秒为单位。返回与延迟事件相关联的标识符,或-1,如果事件无法公布。
此函数立即返回。当延迟已过期,该事件将被添加到状态机的事件队列进行处理。状态机取事件的所有权,并删除它,一旦它已被处理。
您只能在状态机运行时发布事件。
Note:这个功能是thread-safe。
See also cancelDelayedEvent()和postEvent( ) 。
该event说法有它的所有权转移给Qt的。
帖子给定的event的给定priority处理这个状态机。
此函数立即返回。该事件被添加到状态机的事件队列中。事件在张贴的顺序处理。状态机取事件的所有权,并删除它,一旦它已被处理。
您只能在状态机运行时发布事件。
Note:这个功能是thread-safe。
See also postDelayedEvent( ) 。
移除animation从预设的动画列表中。
该state争论
删除给定的state从这个状态机。状态的状态机版本的所有权。
See also addState( ) 。
这种方法也是一个Qt槽与C + +的签名void start()。
启动这个状态机。机器将重置它的配置和过渡到初始状态。当最后的顶级状态(QFinalState)输入时,机器会发出的finished()信号。
Note:状态机将不无运行事件循环,如主应用程序事件循环运行开始QCoreApplication.exec()或QApplication.exec( ) 。
See also started( )finished( )stop()和initialState( ) 。
这种方法也是一个Qt槽与C + +的签名void stop()。
停止该状态机。状态机将停止处理事件,然后放出stopped()信号。
这是该信号的默认超载。
当状态机进入初始状态(这个信号被发射QStateMachine.initialState) 。
See also QStateMachine.finished()和QStateMachine.start( ) 。
这是该信号的默认超载。
这个信号被发射时,状态机已经停止。
See also QStateMachine.stop()和QStateMachine.finished( ) 。
PyQt 4.10.3 for X11 | Copyright © Riverbank Computing Ltd and Nokia 2012 | Qt 4.8.5 |