ScxmlStateMachine QML Type
提供了一个用于访问由 SCXML 文件创建的状态机的接口。更多内容...
| Import Statement: | import QtScxml 6.12 |
| In C++: | QScxmlStateMachine |
属性
- dataModel : ScxmlDataModel
- initialValues : var
- initialized : bool
- invoked : bool
- invokedServices : list
- loader : Loader
- name : string
- parseErrors : var
- running : bool
- sessionId : string
信号
- finished()
- log(string label, string msg)
- reachedStableState()
方法
- list<string> activeStateNames(bool compress)
- void cancelDelayedEvent(string sendId)
- bool init()
- bool isActive(string scxmlStateName)
- bool isDispatchableTarget(string target)
- void start()
- list<string> stateNames(bool compress)
- void stop()
- void submitEvent(event)
- void submitEvent(string eventName, var data)
详细说明
ScxmlStateMachine 类型是状态图 XML(SCXML)的一种实现。
SCXML 文件中定义的所有状态均可作为该类型的属性进行访问。这些属性为布尔值,用于指示状态是处于活动状态还是非活动状态。
属性文档
dataModel : ScxmlDataModel
此状态机将使用的数据模型。
SCXML 数据模型在《SCXML 规范 - 第 5 章 数据模型与数据操作》中进行了描述。有关支持的数据模型的更多信息,请参阅《SCXML 合规性》。
SCXML 标准中未规定在状态机已处于“initialized ”状态时更改数据模型,此操作将导致未定义的行为。
另请参阅 QScxmlDataModel 、QScxmlNullDataModel 以及QScxmlCppDataModel 。
initialValues : var
用于设置数据模型的初始值。
initialized : bool [read-only]
如果状态机已初始化,则此只读属性被设置为true ;否则,被设置为false 。
invoked : bool [read-only]
该状态机是否由外部状态机调用。
当状态机通过<invoke> 元素作为服务启动时,此只读属性被设置为true ;否则,其值为false 。
invokedServices : list [read-only]
从主状态机调用(可能为递归调用)的 SCXML 服务列表。
loader : Loader
当前用于解析和加载状态机 URI 的加载器。
name : string [read-only]
由<scxml> 标签的name属性设置的状态机名称。
parseErrors : var [read-only]
从 SCXML 文件创建状态机时发生的解析错误列表。
running : bool
该状态机的运行状态。
sessionId : string [read-only]
当前状态机的会话 ID。
会话 ID 用于父子状态机之间的消息路由。如果某个状态机由<invoke> 元素启动,则它发送的任何事件的invokeid 字段都会被设置为该会话 ID。 状态机将使用事件的来源(由<send> 元素中的target或targetexpr属性设定)来将消息分发到正确的子状态机。
信号文档
finished()
当状态机到达顶级终态时,会发出此信号。
相应的信号处理程序为onFinished() 。
注意: 相应的处理程序 是onFinished 。
log(string label, string msg)
如果在 SCXML 中使用了<log> 标签,则会发出此信号。label 是<log> 标签的label属性的值。msg 是<log> 标签中经过求值的expr属性的值。如果不存在expr属性,则返回空字符串。
相应的信号处理程序是onLog() 。
注意: 对应的处理程序 为onLog 。
reachedStableState()
当宏步骤结束时事件队列为空,或者达到最终状态时,会发出此信号。
相应的信号处理程序为onreachedStableState() 。
注意: 相应的处理程序 是onReachedStableState 。
方法文档
list<string> activeStateNames(bool compress)
获取所有活动状态的状态名称列表。
根据定义,当某个状态处于活动状态时,其所有父状态也处于活动状态。当compress 的值为true (默认值)时,系统会过滤掉父状态,仅返回叶状态;当该值为false 时,则返回完整的活动状态列表。
void cancelDelayedEvent(string sendId)
取消具有指定sendId 的延迟事件。
bool init()
通过为<data> 元素设置初始值,并执行<scxml> 标签中的所有<script> 标签,来初始化状态机。初始数据值取自initialValues 属性。
如果发生解析错误或任何初始化步骤失败,则返回false 。否则返回true 。
bool isActive(string scxmlStateName)
如果由 `scxmlStateName ` 指定的状态处于活动状态,则返回 `true `;否则返回 `false `。
bool isDispatchableTarget(string target)
如果该状态机能够分发一封发往target 的消息,则返回 `true `。
有效目标包括:
#_parent如果当前状态机是由<invoke>#_internal针对当前状态机#_scxml_sessionid,其中sessionid是当前状态机的会话 ID#_servicename,其中servicename是该状态机使用<invoke>启动的服务的 ID 或名称
void start()
启动此状态机。状态机将重置其配置并转入初始状态。当进入最终的顶级状态时,状态机将发出finished()信号。
list<string> stateNames(bool compress)
获取所有州的州名列表。
当 `compress ` 设置为 `true `(默认值)时,会过滤掉包含子状态的状态,仅返回叶状态。当设置为 `false` 时,则返回所有状态的完整列表。
返回的列表不包含可能存在的嵌套状态机的状态。
注意: 列表中状态名称的顺序即为这些状态在 SCXML 文档中出现的顺序。
void stop()
停止此状态机。该状态机将不再执行任何状态转换。其running 属性被设置为false 。
void submitEvent(event)
根据事件的优先级,将 SCXML 事件event 提交到内部或外部事件队列。
如果设置了延迟,则该事件将在超时后被排入队列以供分发。状态机将接管该事件,并在处理完成后将其删除。
另请参阅 QScxmlEvent 。
void submitEvent(string eventName, var data)
一个实用方法,用于创建并提交一个外部事件,其名称为指定的eventName ,有效载荷数据为data (可选)。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.