使用 Qt SCXML 编译器 (qscxmlc)

工具 qscxmlc 读取 .scxml 文件并生成 C++ 源文件和头文件,包含一个实现 SCXML 定义的有限状态机的类。

用法

当项目关联到项目文件中的 scxml 库,并且使用特殊构建指令 STATECHARTS 或 qt6_add_statecharts 指定要使用的 .scxml 文件时,工具 qscxmlc 将自动调用。

使用 cmake

find_package(Qt6 REQUIRED COMPONENTS Scxml)
target_link_libraries(mytarget PRIVATE Qt6::Scxml)
qt6_add_statecharts(mytarget
    MyStatemachine.scxml
)

使用 qmake

QT += scxml
STATECHARTS = MyStatemachine.scxml

根据上述定义,qmakecmake 将调用 qscxmlc 生成 MyStatemachine.h 和 MyStatemachine.cpp,并将它们作为头文件和源文件适当地添加到项目中。

默认情况下,实现有限状态机的生成的类的名称与 <scxml> 根元素的 name 属性相对应。

工具 qscxmlc 也可以手动调用,生成的头文件和源文件可以用作项目的常规源文件。当将这些源文件用作 cmake 项目的部分时,必须在 CMakeLists.txt 文件中禁用自动 moc,如下例所示

set_source_files_properties(statemachine.h PROPERTIES SKIP_AUTOMOC TRUE)

如果您省略此操作,则在编译过程中将看到重复符号错误。

命令行选项

工具 qscxmlc 支持以下命令行选项

选项描述
--namespace <namespace>将生成的类 (类) 放入指定的命名空间。
-o <base/out/name>输出文件的基名。这可以包含路径。如果没有指定,则使用输入文件的基名。
--header <header/out>输出头文件的名称。如果没有指定,则为基名添加 .h。
--impl <cpp/out>输出头文件的名称。如果没有指定,则为基名添加 .cpp。
--classname <StateMachineClassName>生成的状态机的类名。如果没有指定,则取 <scxml> 标记的 name 属性的值。如果没有指定该属性,则从输入文件名中提取(不含路径)基名。
--statemethods生成状态额外的访问器和信号方法。这样,您可以使用普通 QObject::connect() 连接到状态变化,并直接调用方法以确定当前是否处于活动状态。

qmakeCMake 项目文件支持以下选项

选项描述
QSCXMLC_DIR|OUTPUT_DIRECTORY <directory>QSCXMLC_DIR(qmake)或 OUTPUT_DIRECTORY(cmake)指定输出文件的目录。OUTPUT_DIR(cmake)已弃用。
QSCXMLC_NAMESPACE|NAMESPACE <namespace>QSCXMLC_NAMESPACE (qmake) 或 NAMESPACE (cmake) 指定了生成的类的命名空间。
QSCXMLC_ARGUMENTS|OPTIONS <options>QSCXMLC_ARGUMENTS (qmake) 或 OPTIONS (cmake) 允许为 qscxmlc 编译器指定附加选项。cmake 中的 QSCXMLC_ARGUMENTS 已弃用。

© 2024 Qt 公司有限公司。本文档中的贡献归各自所有者所有。本提供的文档受 GNU 自由文档许可证第 1.3 版的许可,该许可证由自由软件基金会发布。Qt 及相关标志是芬兰以及/或其他国家/地区的 The Qt Company Ltd. 的商标。所有其他商标均为各自所有者的财产。