QScxmlStateMachine 类

QScxmlStateMachine 类提供了从 SCXML 文件创建的状态机的接口。 更多...

头文件 #include <QScxmlStateMachine>
CMakefind_package(Qt6 REQUIRED COMPONENTS Scxml)
target_link_libraries(mytarget PRIVATE Qt6::Scxml)
qmakeQT += scxml
实例化 ScxmlStateMachine
继承 QObject

属性

公共函数

QStringListactiveStateNames(bool compress = true) const
QBindable<QScxmlDataModel *>bindableDataModel()
QBindable<QVariantMap>bindableInitialValues()
QBindable<bool>bindableInitialized() const
QBindable<QList<QScxmlInvokableService *>>bindableInvokedServices()
QBindable<QScxmlCompiler::Loader *>bindableLoader()
QBindable<QScxmlTableData *>bindableTableData()
voidcancelDelayedEvent(const QString &sendId)
QMetaObject::ConnectionconnectToEvent(const QString &scxmlEventSpec, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::ConnectionconnectToEvent(const QString &scxmlEventSpec, const QObject *context, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::ConnectionconnectToEvent(const QString &scxmlEventSpec, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::ConnectionconnectToState(const QString &scxmlStateName, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::ConnectionconnectToState(const QString &scxmlStateName, const QObject *context, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::ConnectionconnectToState(const QString &scxmlStateName, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)
QScxmlDataModel *dataModel() const
QVariantMapinitialValues()
QList<QScxmlInvokableService *>invokedServices() const
boolisActive(const QString &scxmlStateName) const
boolisDispatchableTarget(const QString &target) const
boolisInitialized() const
boolisInvoked() const
boolisRunning() const
QScxmlCompiler::Loader *loader() const
QStringname() const
QList<QScxmlError>parseErrors() const
QStringsessionId() const
voidsetDataModel(QScxmlDataModel *model)
voidsetInitialValues(const QVariantMap &initialValues)
voidsetLoader(QScxmlCompiler::Loader *loader)
voidsetRunning(bool running)
voidsetTableData(QScxmlTableData *tableData)
QStringListstateNames(bool compress = true) const
voidsubmitEvent(QScxmlEvent *event)
voidsubmitEvent(const QString &eventName)
voidsubmitEvent(const QString &eventName, const QVariant &data)
QScxmlTableData *tableData() const

公共槽

boolinit()
voidstart()
voidstop()

信号

voiddataModelChanged(QScxmlDataModel *model)
voidfinished()
voidinitialValuesChanged(const QVariantMap &initialValues)
voidinitializedChanged(bool initialized)
voidinvokedServicesChanged(const QList<QScxmlInvokableService *> &invokedServices)
voidloaderChanged(QScxmlCompiler::Loader *loader)
voidlog(const QString &label, const QString &msg)
voidreachedStableState()
voidrunningChanged(bool running)
voidtableDataChanged(QScxmlTableData *tableData)

静态公共成员

QScxmlStateMachine *fromData(QIODevice *data, const QString &fileName = QString())
QScxmlStateMachine *fromFile(const QString &fileName)
std::function<void (bool)>onEntry(const QObject *receiver, const char *method)
std::function<void (bool)>onEntry(Functor functor)
std::function<void (bool)>onEntry(const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method)
std::function<void (bool)>onExit(const QObject *receiver, const char *method)
std::function<void (bool)>onExit(Functor functor)
std::function<void (bool)>onExit(const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method)

受保护的函数

boolisActive(int stateIndex) const

详细说明

QScxmlStateMachine是状态图表XML (SCXML)的实现。

所有在SCXML文件中定义的状态都可作为QScxmlStateMachine的属性访问。这些属性是布尔值,表示状态是否处于活动状态或非活动状态。

注意:QScxmlStateMachine 正确工作需要一个 QEventLoop。事件循环用于实现事件的delay属性,并在接收到嵌套(或父)状态机的事件时调度状态机处理。

属性文档

[可绑定] dataModel : QScxmlDataModel*

注意:此属性支持QProperty绑定。

此属性包含要用于此状态机的数据模型。

SCXML数据模型在SCXML规范 - 5 数据模型和数据操作中描述。有关支持的数据模型的更多信息,请参阅SCXML遵从性

状态机已初始化时更改数据模型,在SCXML标准中未指定,可能导致未定义行为。

另请参阅:QScxmlDataModelQScxmlNullDataModelQScxmlCppDataModel

[可绑定] initialValues : QVariantMap

注意:此属性支持QProperty绑定。

此属性包含设置数据模型时使用的初始值。

另请参阅:QScxmlStateMachine::init()和QScxmlDataModel

[仅读可绑定] initialized : bool

注意:此属性支持QProperty绑定。

此属性表示状态机是否已初始化。

如果状态机已初始化,则为true,否则为false

另请参阅:QScxmlStateMachine::init()和QScxmlDataModel

[只读] invoked : const bool

此属性表示状态机是否从外部状态机调用。

当状态机作为服务使用<invoke>元素启动时为true,否则为false

访问函数

boolisInvoked() const

[仅读可绑定] invokedServices : QList<QScxmlInvokableService*>

注意:此属性支持QProperty绑定。

此属性包含从主状态机(可能是递归地)调用的SCXML服务列表。

[可绑定] loader : QScxmlCompiler::Loader*

注意:此属性支持QProperty绑定。

此属性包含当前用于解决和加载数据模型URI的加载器。

[只读] name : const QString

此属性包含状态机的名称,该名称由<scxml>标签的name属性设置。

访问函数

QStringname() const

[只读] parseErrors : const QList<QScxmlError>

此属性包含从 SCXML 文件创建状态机时发生的解析错误列表。

访问函数

QList<QScxmlError>parseErrors() const

running : bool

此属性包含此状态机的运行状态

访问函数

boolisRunning() const
voidsetRunning(bool running)

通知信号

voidrunningChanged(bool running)

另请参阅 start().

[只读] sessionId : const QString

此属性包含当前状态机的会话 ID。

会话 ID 用于在父状态机和子状态机之间进行消息路由。如果状态机由一个 <invoke> 元素启动,它发送的任何事件都将设置 invokeid 字段为会话 ID。状态机将使用事件的来源(由 <send> 元素中的 targettargetexpr 属性设置)来将消息派发到正确的子状态机。

访问函数

QStringsessionId() const

另请参阅 QScxmlEvent::invokeId

[可绑定] tableData : QScxmlTableData*

注意:此属性支持QProperty绑定。

此属性包含从 SCXML 文件生成 C++ 时使用的表数据。

实现状态机的类将使用此属性来分配生成的表数据。状态机不会假定对表数据的所有权。

成员函数文档

template <typename Functor> QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)

template <typename Functor> QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, const QObject *context, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)

创建从由 scxmlEventSpec 指定的事件到 functor 的给定 type 的连接,其中 functor 可以是泛型或可选 context 对象的成员函数。

接收器的 functor 必须接受一个 QScxmlEvent 参数。

与 SCXML 文档中的事件规范不同,此处不允许在 scxmlEventSpec 中使用空格。为了连接到具有不同前缀的多个事件,必须多次调用 connectToEvent()。

返回连接处理的句柄,可稍后用于断开连接。

模板 <typename Functor> QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)

模板 <typename Functor> QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, const QObject *context, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)

创建从由 scxmlStateName 指定的状态到 functor 的连接,其中 functor 可以是一个函数对象或可选的 context 对象的成员函数。

接收者的 functor 必须接受一个布尔参数,该参数指示所连接的状态是否变得活跃或非活跃。

返回连接处理的句柄,可稍后用于断开连接。

[调用] QStringList QScxmlStateMachine::activeStateNames(bool compress = true) const

获取所有活跃状态的状态名称列表。

当一个状态是活跃的,根据定义,所有其父状态都是活跃的。当 compresstrue(默认值)时,父状态将被过滤,并且仅返回 叶片状态。当它为 false 时,将返回活跃状态的完整列表。

注意:此函数可以通过元对象系统从 QML 调用。请参阅 Q_INVOKABLE

[调用] void QScxmlStateMachine::cancelDelayedEvent(const QString &sendId)

取消具有指定 sendId 的延迟事件。

注意:此函数可以通过元对象系统从 QML 调用。请参阅 Q_INVOKABLE

QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

从由 scxmlEventSpec 指定的事件创建到 receiver 对象的 method 的连接。接收者的 method 可以接受一个 QScxmlEvent 作为参数。例如

void mySlot(const QScxmlEvent &event);

与 SCXML 文档中的事件规范不同,此处不允许在 scxmlEventSpec 中使用空格。为了连接到具有不同前缀的多个事件,必须多次调用 connectToEvent()。

返回连接处理的句柄,可稍后用于断开连接。

QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

创建一个从由 scxmlStateName 确定的状态到 receiver 对象的 method 的连接,其中 method 可以接受一个布尔参数,该参数指示所连接的状态是否变得活跃或非活跃。例如

void mySlot(bool active);

返回连接处理的句柄,可稍后用于断开连接。

QScxmlDataModel *QScxmlStateMachine::dataModel() const

返回状态机使用的模型。

注意:属性dataModel的获取函数。

另见:setDataModel().

[信号] void QScxmlStateMachine::finished()

当状态机到达顶级最终状态时,会发出此信号。

另见:running.

[静态] QScxmlStateMachine *QScxmlStateMachine::fromData(QIODevice *data, const QString &fileName = QString())

通过读取指定的data所述QIODevice创建状态机。

此方法始终返回状态机。如果在读取SCXML文件时发生错误,则无法启动状态机。可以通过调用parseErrors()方法检索错误。

另见:parseErrors.

[静态] QScxmlStateMachine *QScxmlStateMachine::fromFile(const QString &fileName)

从指定的fileName SCXML文件创建状态机。

此方法始终返回状态机。如果在读取SCXML文件时发生错误,则无法启动状态机。可以通过调用parseErrors()方法检索错误。

另见:parseErrors.

[槽] bool QScxmlStateMachine::init()

初始化状态机。

状态机初始化包括调用QScxmlDataModel::setup(),设置<data>元素的初始值,以及执行<scxml>标签的任何<script>标签。初始数据值来自initialValues属性。

如果在解析过程中发生错误或任何初始化步骤失败,则返回false。否则返回true

[可调用] bool QScxmlStateMachine::isActive(const QString &scxmlStateName) const

如果scxmlStateName指定的状态是活跃的,则返回true,否则返回false

注意:此函数可以通过元对象系统从 QML 调用。请参阅 Q_INVOKABLE

[保护] bool QScxmlStateMachine::isActive(int stateIndex) const

如果ID为stateIndex的状态是活跃的,则返回true

此方法是SCXML状态机编译表示接口的一部分。它应仅在内部使用,并由SCXML文档编译的状态机使用。

[可调用] bool QScxmlStateMachine::isDispatchableTarget(const QString &target) const

如果此状态机可以发送到target的消息,则返回true

有效的目标有

  • #_parent,如果当前状态机通过<invoke>启动,则为父状态机
  • #_internal,对于当前状态机
  • #_scxml_sessionid,其中 sessionid 是当前状态机的会话ID
  • #_servicename,其中 servicename 是通过状态机 <invoke> 启动的服务的ID或名称

注意:此函数可以通过元对象系统从 QML 调用。请参阅 Q_INVOKABLE

bool QScxmlStateMachine::isRunning() const

如果状态机正在运行,则返回 true,否则返回 false

注意:属性 running 的获取函数。

另请参阅:setRunning() 和 runningChanged

[信号] void QScxmlStateMachine::log(const QString &label, const QString &msg)

如果SCXML中使用 <log> 标签,则发送此信号。 label<log> 标签的 label 属性的值。 msg<;log> 标签评估的 expr 属性的值。如果没有 expr 属性,则返回空字符串。

[静态] std::function<void (bool)> QScxmlStateMachine::onEntry(const QObject *receiver, const char *method)

返回一个接受布尔参数的函子,如果该参数为 true,则将给定的 methodreceiver 上使用 QMetaObject::invokeMethod() 调用(如果 receiver 尚未删除)。

给定的 method 不应接受任何参数。 method 是普通的方法名称,不是用 SIGNAL()SLOT() 封装。

这对于将处理程序 connectToState 封装起来非常有用,只有当状态被进入时才执行该处理程序。

[静态] 模板 <typename Functor> std::function<void (bool)> QScxmlStateMachine::onEntry(Functor functor)

返回一个接受布尔参数的函子,如果该参数为 true,则调用给定的 functor。给定的 functor 不接受任何参数。

这对于将处理程序 connectToState 封装起来非常有用,只有当状态被进入时才执行该处理程序。

[静态] 模板 <typename PointerToMemberFunction> std::function<

返回一个接受布尔参数的函子,如果该参数为 truereceiver 尚未删除,则调用 receiver 上的给定 method。给定的 method 不接受任何参数。

这对于将处理程序 connectToState 封装起来非常有用,只有当状态被进入时才执行该处理程序。

[静态] std::function<void (bool)> QScxmlStateMachine::onExit(const QObject *receiver, const char *method)

返回一个接受布尔参数并在该参数为false且接收者尚未被删除的情况下调用指定方法的仿函数。使用QMetaObject::invokeMethod()通过接收者调用该方法。

给定方法不得接受任何参数。method是方法的纯名称,不包括在SIGNAL(...)或SLOT(...)中。

当状态被离开时,这对于封装connectToState()的处理程序非常有用。

[静态]模板 <typename Functor> std::function<void (bool)> QScxmlStateMachine::onExit(Functor functor)

返回一个接受布尔参数并在该参数为false时调用给定仿函数的仿函数。给定仿函数不得接受任何参数。

当状态被离开时,这对于封装connectToState()的处理程序非常有用。

[静态]模板 <typename PointerToMemberFunction> std::function<void (bool)> QScxmlStateMachine::onExit(const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method)

返回一个接受布尔参数并在该参数为false且接收者尚未被删除的情况下调用给定接收者上指定方法的仿函数。给定方法不得接受任何参数。

当状态被离开时,这对于封装connectToState()的处理程序非常有用。

[信号] void QScxmlStateMachine::reachedStableState()

在宏步骤结束时事件队列为空或达到最终状态时发出此信号。

[信号] void QScxmlStateMachine::runningChanged(bool running)

当将running属性更改时的参数为running时发出此信号。

注意:属性running的通告信号。

void QScxmlStateMachine::setDataModel(QScxmlDataModel *model)

为此状态机设置数据模型model。状态机与模型之间有一个1:1的关系。设置模型一次后,您无法再更改它。使用此方法进一步尝试设置模型将被忽略。

注意:属性dataModel的设置函数。

另请参阅:dataModel

void QScxmlStateMachine::setRunning(bool running)

如果runningtrue,则启动状态机,否则停止。

注意:属性running的设置函数。

另请参阅:start(),stop(),isRunning()和runningChanged()。

[槽函数] void QScxmlStateMachine::start()

启动此状态机。机器将重置其配置并转到初始状态。当进入最终顶层状态时,机器将发出finished()信号。

注意:状态机在没有运行的事件循环的情况下无法运行,例如使用QCoreApplication::exec() 或 QApplication::exec() 启动的应用程序主事件循环。

另请参阅runningChangedsetRunningstop,和 finished

[可调用] QStringList QScxmlStateMachine::stateNames(bool compress = true) const

获取所有状态的状态名称列表。

compresstrue(默认值),包含子状态的状态将被过滤,只返回 叶状态。当它为 false 时,将返回所有状态的完整列表。

返回的列表不包含可能嵌套的状态机的状态。

注意:列表中状态名称的顺序是状态在 SCXML 文件中出现的顺序。

注意:此函数可以通过元对象系统从 QML 调用。请参阅 Q_INVOKABLE

[槽函数] void QScxmlStateMachine::stop()

停止此状态机。该机器将不再执行任何状态转换。其 running 属性设置为 false

另请参阅runningChangedstart,和 setRunning

[可调用] void QScxmlStateMachine::submitEvent(QScxmlEvent *event)

将 SCXML 事件 event 提交到内部或外部事件队列,具体取决于事件的优先级。

当设置延迟时,事件将在超时后排队发送。状态机将拥有 event,并在处理后在删除它。

注意:此函数可以通过元对象系统从 QML 调用。请参阅 Q_INVOKABLE

[可调用] void QScxmlStateMachine::submitEvent(const QString &eventName)

一个创建并提交具有指定 eventName 作为名称的辅助方法。

注意:此函数可以通过元对象系统从 QML 调用。请参阅 Q_INVOKABLE

[可调用] void QScxmlStateMachine::submitEvent(const QString &eventName, const QVariant &data)

一个创建并提交具有指定 eventName 作为名称和数据作为有效载荷数据的辅助方法。

注意:此函数可以通过元对象系统从 QML 调用。请参阅 Q_INVOKABLE

© 2024 Qt 公司。此处包含的文档贡献是其各自所有者的版权。此处提供的文档根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 的条款进行许可。Qt 和相应的商标是芬兰的 Qt 公司及其它全球国家的注册商标。所有其他商标均为各自所有者的财产。