Qt SCXML 概述

Qt SCXML 模块提供了在 Qt 应用程序中嵌入由 Qt Charts XML(SCXML)文件创建的状态机的类。SCXML 文件可使用任何合适的工具创建,如文本编辑器或模拟器,只要它们符合SCXML 规范,并遵守SCXML 合规性中描述的限制和扩展。

部分应用逻辑可以用封装的 SCXML 文件代替。这样就可以通过使用Qt QuickQt Widgets 在应用逻辑和用户界面实现之间建立明确的分界。

Qt SCXML 模块与状态机框架中的 Qt State Machine模块的不同之处在于,Qt SCXML 提供了一个符合要求的处理器,可以解析和处理符合要求的 SCXML 文档。在Qt SCXML 中,状态机从独立的 SCXML 文件中读取,并通过实例化QScxmlStateMachine 类和动态加载 SCXML 文件,或使用Qt SCXML 编译器生成QScxmlStateMachine 的子类,将其实例化后集成到 Qt 应用程序中。与 SCXML 文档的通信由QScxmlStateMachine 类的信号和方法提供。

基本的状态机概念、状态转换事件都是基于 SCXML 规范中的概念。状态图提供了一种以图形方式模拟系统如何对刺激做出反应的方法。这是通过定义系统可能处于的状态,以及系统如何从一种状态移动到另一种状态(状态之间的转换)来实现的。事件驱动系统(如 Qt 应用程序)的一个主要特点是,其行为往往不仅取决于最后或当前的事件,还取决于之前的事件。有了状态图,这些信息就很容易表达了。

Qt SCXML 状态图与 Qt 的元对象系统紧密集成;例如,状态之间的转换可由信号触发,状态可配置为设置属性和调用 上的方法。Qt 的事件系统用于驱动状态机。QObjects

Qt SCXML 中的状态图是分层的。状态可以嵌套在其他状态中,状态机的当前配置由当前激活的状态集组成。

数据模型

Qt SCXML 支持 null 数据模型(符合要求的 SCXML 处理器必须支持 null 数据模型)和 ECMAScript 数据模型。此外, 还提供自己的 C++ 数据模型,由 类实现。该类可为Qt SCXML QScxmlCppDataModel expr属性和 元素编写 C++ 代码。数据模型的<script> 数据部分由 的子类支持, 编译器将为其生成调度方法。QScxmlCppDataModel Qt SCXML

Qt SCXML 编译器

Qt SCXML 编译器(qscxmlc )可读取 .scxml 文件并生成 C++ 源文件和头文件,其中包含一个实现 SCXML 中定义的状态机的类。有关使用编译器的更多信息,请参阅使用Qt SCXML 编译器 (qscxmlc)

动态创建的状态机和编译后的状态机行为方式相同,具有相同的属性、状态、数据模型等。它们的区别仅在于实例化的方式不同。更多信息,请参阅实例状态机Qt SCXML 示例

日志类别

Qt SCXML 模块导出了以下日志类别:

日志类别说明
qscxmlLog启用Qt SCXML 模块日志
scxmlLog启用 SCXML 文档日志

© 2025 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.