Qt SCXML 概述

Qt SCXML 模块提供了嵌入式状态机的类,这些状态机是由 State Chart XML (SCXML) 文件创建的。可以使用任何合适的工具创建 SCXML 文件,如文本编辑器或模拟器,只要它们符合 SCXML 规范,并在 SCXML 兼容性 中描述的限制和扩展。

可以将应用程序逻辑的某些部分替换为封装的 SCXML 文件。使用 Qt Quick 或 Qt Widgets 可以通过这种方式在应用程序逻辑和用户界面实现之间创建清晰的划分。

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

基本状态机概念,即 状态转换事件 基于 SCXML 规范中的定义。状态图提供了一个图形化的方法来表示系统如何响应刺激。这是通过定义系统可以处于的可能的州,以及系统如何从一个状态移动到另一个状态(状态之间的转换)来完成的。事件驱动系统(如 Qt 应用程序)的一个关键特性是行为不仅取决于最后或当前事件,还取决于之前的事件。通过状态图,这种信息很容易表达。

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

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

数据模型

Qt SCXML 支持 null 数据模型,它必须由符合的 SCXML 处理器支持,以及 ECMAScript 数据模型。此外,Qt SCXML 通过 QScxmlCppDataModel 类提供了自己的 C++ 数据模型。该类使得可以为 expr 属性和 <script> 元素编写 C++ 代码。数据模型的数据部分由 QScxmlCppDataModel 的子类支持,Qt SCXML 编译器将为这些子类生成调度方法。

Qt SCXML 编译器

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

动态创建的和编译的状态机表现相同,具有相同的属性、状态、数据模型等。它们只是实例化方式不同。有关更多信息,请参阅实例化状态机Qt SCXML 示例

日志类别

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

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

© 2024 The Qt Company Ltd. 所包含的文档贡献是各自所有者的版权。提供的文档根据自由软件基金会的版本1.3的GNU自由文档许可协议条款许可。Qt及其相关标志是芬兰和/或世界其他地区The Qt Company Ltd.的商标。所有其他商标均为各自所有者的财产。