Qt SCXML 概述

Qt SCXML 模块提供将从 SCXML (状态图表 XML) 文件创建的状态机,嵌入 Qt 应用程序的类。可以使用任何适合工具 (譬如:文本编辑器或模拟器) 创建 SCXML 文件,只要它们遵从 SCXML 规范 ,采用限定和扩展的描述在 SCXML 合规 .

可以采用封装 SCXML (状态图表 XML) 文件替换部分应用程序逻辑。这使能够创建应用程序逻辑和用户界面 (使用 Qt Quick 或 Qt Widgets 实现) 之间的清晰划分。

Qt SCXML 模块不同于 状态机框架 在 Qt Core 模块中,Qt SCXML 提供 符合处理器 可以剖析和处理 符合 SCXML 文档 。在 Qt SCXML,状态机读取自单独 SCXML 文件,和集成到 Qt 应用程序通过实例化 QScxmlStateMachine 类并动态加载 SCXML 文件或通过使用 Qt SCXML Compiler 以生成子类 QScxmlStateMachine 实例。与 SCXML 文档通信的信号和方法,提供通过 QScxmlStateMachine 类。

基本状态机概念, state , transition ,和 event 基于那些 SCXML 规范。状态图表提供系统如何应答刺激的图形建模方式。这是通过定义系统可能处于的状态及系统如何从一种状态移动到另一种状态 (在状态之间过渡) 来完成的。事件驱动系统 (譬如 Qt 应用程序) 的关键特征:行为经常不仅取决于最后或当前事件,且还取决于它之前的事件。使用状态图表,表达这种信息很容易。

Qt SCXML 紧密集成于 Qt 元对象系统;例如,状态之间的过渡可以通过信号触发,且状态可以配置以设置特性和援引方法在 QObjects 。Qt 事件系统用于驱动状态机。

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

数据模型

Qt SCXML 支持 null 数据模型 (必须由符合 SCXML 处理器所支持) 和 ECMAScript 数据模。此外,Qt SCXML 提供自己的 C++ 数据模型,实现通过 QScxmlCppDataModel 类。类使能够编写 C++ 代码为 expr 属性和 <script> 元素。 数据部分 的数据模型后援是子类化的 QScxmlCppDataModel ,为此 Qt SCXML 编译器将生成调度方法。

Qt SCXML 编译器

Qt SCXML 编译器 qscxmlc ,读取 .scxml 文件并产生 C++ 源和头文件,包含 SCXML 定义状态机的实现类。有关使用编译器的更多信息,见 使用 Qt SCXML 编译器 (qscxmlc) .

动态创建状态机和编译状态机两者行为方式相同,拥有相同特性、状态、数据模型等。它们仅实例化方式有所不同。更多信息,见 实例化状态机 and Qt SCXML 范例 .

日志类别

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

日志类别 描述
qscxmlLog 启用 Qt SCXML 模块日志
scxmlLog 启用 SCXML 文档日志