使用 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
根据上述定义,qmake
或 cmake
将调用 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() 连接到状态变化,并直接调用方法以确定当前是否处于活动状态。 |
qmake
和 CMake
项目文件支持以下选项
选项 | 描述 |
---|---|
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. 的商标。所有其他商标均为各自所有者的财产。