StupidBeauty
Read times:2386Posted at: - no title specified

Qt5.4文档翻译:QStateMachine,QStateMachine Class

QStateMachine 类实现了一个层次型的有限状态自动机。 详细说明……

头文件:

#include <QStateMachine>

qmake指令

QT += core

自此版本开始引入:

Qt 4.6

继承

QState .

注意: 这个类中的所有函数都是 可重入的 ,并且 postEvent () postDelayedEvent () cancelDelayedEvent () 同时还是 线程安全

详细说明

QStateMachine 类实现了一个层次型的有限状态自动机。

QStateMachine 在理论上基于 状态图 的概念和标记。 QStateMachine 状态机框架 的组成部分。

状态 机,管理着一组状态 (继承 QAbstractState 的类 ) ,以及这些状态之间的迁移 ( QAbstractTransition 的子代类 ) 这些状态和迁移组合到一起就定义出了一个状态图。 一旦状态图构造完毕,就可以用状态机来执行它。 QStateMachine 的执行算法是以 状态 XML (SCXML) 算法为基础的。 此框架的 概述 中给出了多个状态图及用来构造它们的代码。

使用 addState ()函数 来向该状态机中加入一个顶级状态。状态 可使用 removeState ()函数来删除。 我们不建议在状态机处于运行状态时从中删除状态。

在启动状态机之前,必须设置 初始状态 。初始状态 ,就是,当状态机启动时所进入的状态。然后 ,可以启动( 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 来设置属性或调用方法。 它还包含了一些便利函数,可用来添加迁移对象,例如示例 中的 QSignalTransition 。参考 QState 类的说明以了解更多细节。

如果 发生了错误,那么,状态机会寻找 错误状态 ,并且,如果真的找到了一个的话,则,它会进入该状态。 Error 枚举中说明了可能发生的错误的类型。 在进入错误状态之后,可使用 error ()来获取到错误的类型。 在进入错误状态之后,状态图的执行不会停止。如果没有错误状态能够反映 这种出错的情况,那么,状态机会停止执行,并且向终端输入一条错误消息。

参考 QAbstractState QAbstractTransition QState 状态 机框架

成员类型文档

enum QStateMachine::​Error

这个枚举,说明的是,在运行时刻,可能在状态机中发生的错误的类型。 当状态机在运行时发生不可恢复的错误的时候,它会设置将会由 error ()返回的错误码, 以及设置将由 errorString ()返回的错误消息,并且 ,根据该错误的上下文进入到一个对应的错误状态中。

常量

说明

QStateMachine::NoError

0

未发生错误。

QStateMachine::NoInitialStateError

1

状态机进入了一个拥有子代状态却没有设置初始状态的 QState 。此错误的上下文,即为,缺少初始状态的那个状态。

QStateMachine::NoDefaultStateInHistoryStateError

2

状态机进入了一个未设置默认状态的 QHistoryState 。此错误的上下文,即为,缺少默认状态的那个 QHistoryState

QStateMachine::NoCommonAncestorForTransitionError

3

状态机选中了一个迁移对象,该对象的源状态和目的状态并不是处于同一个状态树中,因而不属于同一个状态机。一般情况下,这就意味着,其中的一个状态还没有被设置任何的亲代状态,或者说,未加入到任何的状态机中。此错误的上下文,即为,迁移对象的源状态。

参考 setErrorState ()

属性文档

errorString  : const  QString

此属性储存着状态机的错误消息字符串。

访问函数

QString

errorString() const

成员函数文档

void  QStateMachine::​ addState ( QAbstractState  *  state )

将指定的状态 state 加入到这个状态机中。该状态会成为一个顶级状态。

如果该状态已经在另一个状态机中了,那么,它首先会被从旧的状态机中删除,然后被加入到此状态机中。

参考 removeState () setInitialState ()

Error  QStateMachine::​ error () const

返回状态机中最后发生的错误的错误码。

void  QStateMachine::​ postEvent ( QEvent  *  event EventPriority priority  = NormalPriority)

向此状态机中发送具有指定优先级 priority 的指定事件 event ,以便处理。

这个函数会立即返回。事件会被加入到该状态机的事件队列中。事件会按照它们发送的顺序来处理。状态机会获取该事件的所有权,并且在处理完毕之后删除它。

妳只能在状态机处于运行状态的情况下向它发送事件。

注意: 这个函数是 线程安全的

参考 postDelayedEvent ()

void  QStateMachine::​ removeState ( QAbstractState  *  state )

从状态机中删除指定的状态 state 。状态机释放该状态的所有权。

参考 addState ()

[slot] void  QStateMachine::​ start ()

启动 这个状态机。状态 机会重置它的配置,并且迁移至初始状态。如果进入了一个终止顶级状态( QFinalState ),那么 ,状态机会发射 finished ()信号。

注意: 状态 机必须处于一个运行状态的事件循环中才能运行,例如由 QCoreApplication::exec ()或 QApplication::exec ()启动的主程序事件循环。

参考 started () finished () stop () initialState () setRunning ()

[signal] void  QStateMachine::​ started ()

当状态机进入它的初始状态( QStateMachine::initialState )时,会发射这个信号。

参考 QStateMachine::finished () QStateMachine::start ()

[slot] void  QStateMachine::​ stop ()

停止 这个状态机。状态 机会停止处理事件,然后发射 stopped ()信号。

参考 stopped () start () setRunning ()

[signal] void  QStateMachine::​ stopped ()

状态机停止后,会发射这个信号。

参考 QStateMachine::stop () QStateMachine::finished ()

Sweet

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands

 
Recent comments
2017年4月~2019年4月垃圾短信排行榜Posted at:Thu Sep 26 04:51:48 2024
Qt5.7文档翻译:QWebEngineCookieStore类,QWebEngineCookieStore ClassPosted at:Fri Aug 11 06:50:35 2023盲盒kill -9 18289 Grebe.20230517.211749.552.mp4