Utilisation du compilateur Qt SCXML (qscxmlc)
L'outil qscxmlc lit un fichier .scxml et produit 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 invoqué automatiquement si le projet est lié à la bibliothèque scxml dans le fichier de projet, et le fichier .scxml à utiliser est spécifié en utilisant les directives de construction spéciales STATECHARTS ou qt_add_statecharts.
Lorsque vous utilisez cmake :
find_package(Qt6 REQUIRED COMPONENTS Scxml)
target_link_libraries(mytarget PRIVATE Qt6::Scxml)qt_add_statecharts(mytarget
MyStatemachine.scxml
)Si vous utilisez qmake :
QT += scxml
STATECHARTS = MyStatemachine.scxml
Avec les définitions ci-dessus, qmake ou cmake invoque qscxmlc pour générer MyStatemachine.h et MyStatemachine.cpp, et les ajoute de manière appropriée au projet en tant qu'en-têtes et sources.
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 <scxml>.
L'outil qscxmlc peut également être invoqué manuellement et les fichiers d'en-tête et de source résultants peuvent être utilisés comme des fichiers source ordinaires dans un projet. Lors de l'utilisation de ces fichiers source dans le cadre d'un projet cmake, il convient de désactiver la fonction moc automatique dans le fichier CMakeLists.txt, comme illustré dans cet exemple :
set_source_files_properties(statemachine.h PROPERTIES SKIP_AUTOMOC TRUE)Si vous ne le faites pas, vous verrez des erreurs de symboles dupliqués lors de la compilation.
Options de la 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> | Le 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> | Le nom du fichier d'en-tête de sortie. Si aucun n'est spécifié, .h est ajouté au nom de base. |
--impl <cpp/out> | Le nom du fichier d'en-tête de sortie. Si aucun n'est spécifié, .cpp est ajouté au nom de base. |
--classname <StateMachineClassName> | Le nom de la classe de la machine à états générée. Si aucune valeur n'est spécifiée, la valeur de l'attribut name de la balise <scxml> est prise en compte. Si cet attribut n'est pas spécifié non plus, le nom de base (à l'exclusion du chemin) est pris à partir du nom du fichier d'entrée. |
--statemethods | Générer des méthodes d'accès et de signal supplémentaires pour les états. De cette façon, vous pouvez vous connecter aux changements d'état avec QObject::connect() et appeler directement une méthode pour savoir si un état est actuellement actif. |
Les fichiers de projet qmake et CMake prennent en charge les options suivantes :
| Option | Description de l'option |
|---|---|
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 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.