Utilisation du compilateur Qt SCXML (qscxmlc)
L'outil qscxmlc lit un fichier .scxml et génère des fichiers source et d'en-tête C++, contenant une classe qui implémente une machine à états telle que définie dans SCXML.
Utilisation
L'outil « qscxmlc » est lancé automatiquement si le projet est lié à la bibliothèque « scxml » dans le fichier de projet, et si le fichier « .scxml » à utiliser est spécifié à l'aide des directives de compilation spéciales « STATECHARTS » ou « qt_add_statecharts ».
En cas d’utilisation de CMake :
find_package(Qt6 REQUIRED COMPONENTS Scxml)
target_link_libraries(mytarget PRIVATE Qt6::Scxml)qt_add_statecharts(mytarget
MyStatemachine.scxml
)Lors de l'utilisation de qmake :
QT += scxmlSTATECHARTS = MyStatemachine.scxmlAvec les définitions ci-dessus, les commandes « qmake » ou « cmake » lancent « qscxmlc » pour générer les fichiers « MyStatemachine.h » et « MyStatemachine.cpp », puis les ajoutent de manière appropriée au projet en tant qu’en-têtes et fichiers source.
Par défaut, le nom de la classe générée qui implémente la machine à états correspond à l’attribut « name » de l’élément racine de <scxml>.
L'outil qscxmlc peut également être lancé manuellement et les fichiers d'en-tête et de code source résultants peuvent être utilisés comme des fichiers source classiques dans un projet. Lorsque vous utilisez ces fichiers source dans le cadre d'un projet cmake, vous devez en outre désactiver le moc automatique dans le fichier CMakeLists.txt, comme illustré par cet exemple :
set_source_files_properties(statemachine.h PROPERTIES SKIP_AUTOMOC TRUE)Si vous omettez cette étape, des erreurs de symboles en double apparaîtront lors de la compilation.
Options de ligne de commande
L'outil qscxmlc prend en charge les options de ligne de commande suivantes :
| Option | Description |
|---|---|
--namespace <namespace> | Place la ou les classes générées dans l'espace de noms spécifié. |
-o <base/out/name> | Nom de base des fichiers de sortie. Il peut inclure un chemin d'accès. Si aucun n'est spécifié, le nom de base du fichier d'entrée est utilisé. |
--header <header/out> | Nom du fichier d'en-tête de sortie. Si aucun nom n'est spécifié, l'extension .h est ajoutée au nom de base. |
--impl <cpp/out> | Nom du fichier d'en-tête de sortie. Si aucun nom n’est spécifié, l’extension .cpp est ajoutée au nom de base. |
--classname <StateMachineClassName> | Nom de la classe de la machine à états générée. Si aucun nom n’est spécifié, la valeur de l’attribut « name » de la balise <scxml> est utilisée. Si cet attribut n’est pas non plus spécifié, le nom de base (sans le chemin d’accès) est extrait du nom du fichier d’entrée. |
--statemethods | Génère des méthodes d’accès et de signal supplémentaires pour les états. Cela vous permet de vous connecter aux changements d’état à l’aide de la simple instruction ` QObject::connect()` et d’appeler directement une méthode pour déterminer si un état est actuellement actif. |
Les fichiers de projet qmake et CMake prennent en charge les options suivantes :
| Option | Description |
|---|---|
QSCXMLC_DIR|OUTPUT_DIRECTORY <directory> | QSCXMLC_DIR (qmake) ou OUTPUT_DIRECTORY (cmake) spécifie le répertoire des fichiers de sortie. OUTPUT_DIR (cmake) est obsolète. |
QSCXMLC_NAMESPACE|NAMESPACE <namespace> | QSCXMLC_NAMESPACE (qmake) ou NAMESPACE (cmake) spécifie l'espace de noms des classes générées. |
QSCXMLC_ARGUMENTS|OPTIONS <options> | QSCXMLC_ARGUMENTS (qmake) ou OPTIONS (cmake) permet de spécifier des options supplémentaires pour le compilateur d’ qscxmlc. QSCXMLC_ARGUMENTS avec cmake est obsolète. |
© 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.