Использование компилятора Qt SCXML (qscxmlc)
Инструмент qscxmlc считывает файл .scxml и генерирует файлы исходного кода C++ и заголовочные файлы, содержащие класс, реализующий конечный автомат, как определено в SCXML.
Использование
Инструмент qscxmlc вызывается автоматически, если проект связан с библиотекой scxml в файле проекта, и файл .scxml для использования указан с помощью специальных директив сборки STATECHARTS или qt6_add_statecharts.
При использовании cmake:
find_package(Qt6 COMPONENTS Scxml REQUIRED) 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, и добавит их соответствующим образом в проект как заголовочные файлы и исходные файлы.
По умолчанию имя сгенерированного класса, реализующего конечный автомат, соответствует атрибуту name корневого элемента <scxml>.
Инструмент qscxmlc также может быть вызван вручную, и полученные заголовочные и исходные файлы могут быть использованы как обычные исходные файлы в проекте. При использовании этих исходных файлов в проекте cmake необходимо дополнительно отключить автоматическую обработку moc в файле CMakeLists.txt, как показано в данном примере:
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> |
Имя класса сгенерированного конечного автомата. Если не указано, используется значение атрибута name тега <scxml>. Если этот атрибут также не указан, базовое имя (без пути) берется из имени входного файла. |
--statemethods |
Генерировать дополнительные методы-аксессоры и сигналы для состояний. Таким образом, вы можете подключиться к изменениям состояния с помощью plain 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. QSCXMLC_ARGUMENTS с cmake устарел. |
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qscxmlc.html