En esta página

Uso del compilador Qt SCXML (qscxmlc)

La herramienta qscxmlc lee un archivo .scxml y produce archivos fuente y de cabecera en C++, que contienen una clase que implementa una máquina de estados tal y como se define en SCXML.

Utilización

La herramienta qscxmlc se invoca automáticamente si el proyecto está enlazado con la biblioteca scxml en el archivo de proyecto, y el archivo .scxml a utilizar se especifica utilizando las directivas especiales de compilación STATECHARTS o qt_add_statecharts.

Cuando se utiliza cmake:

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

Con qmake:

QT += scxml
STATECHARTS = MyStatemachine.scxml

Con las definiciones anteriores, qmake o cmake invoca a qscxmlc para generar MyStatemachine.h y MyStatemachine.cpp, y los añade apropiadamente al proyecto como cabeceras y fuentes.

Por defecto, el nombre de la clase generada que implementa la máquina de estados se corresponde con el atributo name del elemento raíz <scxml>.

La herramienta qscxmlc también puede invocarse manualmente y los archivos fuente y de cabecera resultantes pueden utilizarse como archivos fuente normales en un proyecto. Cuando se utilizan estos archivos fuente como parte de un proyecto cmake, se debe deshabilitar adicionalmente moc automático en el archivo CMakeLists.txt como se ilustra en este ejemplo:

set_source_files_properties(statemachine.h PROPERTIES SKIP_AUTOMOC TRUE)

Si omite esto, verá errores de símbolos duplicados durante la compilación.

Opciones de la línea de comandos

La herramienta qscxmlc soporta las siguientes opciones de línea de comandos:

OpciónDescripción
--namespace <namespace>Coloca la(s) clase(s) generada(s) en el espacio de nombres especificado.
-o <base/out/name>El nombre base de los archivos de salida. Puede incluir una ruta. Si no se especifica ninguno, se utilizará el nombre base del archivo de entrada.
--header <header/out>El nombre del fichero de cabecera de salida. Si no se especifica ninguno, se añade .h al nombre base.
--impl <cpp/out>El nombre del fichero de cabecera de salida. Si no se especifica ninguno, se añade .cpp al nombre base.
--classname <StateMachineClassName>El nombre de la clase de la máquina de estados generada. Si no se especifica ninguno, se toma el valor del atributo name de la etiqueta <scxml>. Si tampoco se especifica ese atributo, se toma el nombre base (excluyendo la ruta) del nombre del fichero de entrada.
--statemethodsGenerar métodos accessor y signal adicionales para los estados. De esta forma se puede conectar a los cambios de estado con QObject::connect() y llamar directamente a un método para saber si un estado está activo en ese momento.

Los archivos de proyecto qmake y CMake admiten las siguientes opciones:

OpciónDescripción
QSCXMLC_DIR|OUTPUT_DIRECTORY <directory>QSCXMLC_DIR (qmake) o OUTPUT_DIRECTORY (cmake) especifica el directorio para los archivos de salida. OUTPUT_DIR (cmake) ha quedado obsoleto.
QSCXMLC_NAMESPACE|NAMESPACE <namespace>QSCXMLC_NAMESPACE (qmake) o NAMESPACE (cmake) especifica el espacio de nombres para las clases generadas.
QSCXMLC_ARGUMENTS|OPTIONS <options>QSCXMLC_ARGUMENTS (qmake) o OPTIONS (cmake) permite especificar opciones adicionales para el compilador qscxmlc. QSCXMLC_ARGUMENTS con cmake ha quedado obsoleto.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.