Verwendung des Qt SCXML Compilers (qscxmlc)

Das Tool qscxmlc liest eine .scxml-Datei und erzeugt C++-Quell- und Header-Dateien, die eine Klasse enthalten, die einen in SCXML definierten Zustandsautomaten implementiert.

Verwendung

Das Tool qscxmlc wird automatisch aufgerufen, wenn das Projekt gegen die Bibliothek scxml in der Projektdatei gelinkt wird und die zu verwendende Datei .scxml mit den speziellen Build-Direktiven STATECHARTS oder qt_add_statecharts angegeben wird.

Bei Verwendung von cmake:

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

Bei Verwendung von qmake:

QT += scxml
STATECHARTS = MyStatemachine.scxml

Mit den obigen Definitionen ruft qmake oder cmake qscxmlc auf, um MyStatemachine.h und MyStatemachine.cpp zu erzeugen, und fügt sie dem Projekt entsprechend als Header und Sourcen hinzu.

Standardmäßig entspricht der Name der generierten Klasse, die den Zustandsautomaten implementiert, dem Attribut name des Wurzelelements <scxml>.

Das Tool qscxmlc kann auch manuell aufgerufen werden, und die resultierenden Header- und Quelldateien können als reguläre Quelldateien in einem Projekt verwendet werden. Wenn Sie diese Quelldateien als Teil eines cmake Projekts verwenden, müssen Sie zusätzlich das automatische moc in der Datei CMakeLists.txt deaktivieren, wie in diesem Beispiel dargestellt:

set_source_files_properties(statemachine.h PROPERTIES SKIP_AUTOMOC TRUE)

Wenn Sie dies nicht tun, werden Sie während der Kompilierung doppelte Symbolfehler sehen.

Kommandozeilen-Optionen

Das Werkzeug qscxmlc unterstützt die folgenden Kommandozeilenoptionen:

OptionBeschreibung
--namespace <namespace>Legt die generierte(n) Klasse(n) in den angegebenen Namespace.
-o <base/out/name>Der Basisname der Ausgabedateien. Dieser kann einen Pfad enthalten. Wenn kein Pfad angegeben ist, wird der Basisname der Eingabedatei verwendet.
--header <header/out>Der Name der Ausgabe-Header-Datei. Wenn keine angegeben ist, wird .h zum Basisnamen hinzugefügt.
--impl <cpp/out>Der Name der Header-Ausgabedatei. Wenn keine angegeben ist, wird .cpp an den Basisnamen angehängt.
--classname <StateMachineClassName>Der Klassenname des generierten Zustandsautomaten. Wird keiner angegeben, wird der Wert des Attributs name des <scxml>-Tags übernommen. Wenn auch dieses Attribut nicht angegeben ist, wird der Basisname (ohne Pfad) aus dem Namen der Eingabedatei übernommen.
--statemethodsErzeugen Sie zusätzliche Accessor- und Signalmethoden für Zustände. Auf diese Weise können Sie sich mit einfachen QObject::connect() mit Zustandsänderungen verbinden und direkt eine Methode aufrufen, um herauszufinden, ob ein Zustand gerade aktiv ist.

Die Projektdateien qmake und CMake unterstützen die folgenden Optionen:

OptionBeschreibung
QSCXMLC_DIR|OUTPUT_DIRECTORY <directory>QSCXMLC_DIR (qmake) oder OUTPUT_DIRECTORY (cmake) gibt das Verzeichnis für die Ausgabedateien an. OUTPUT_DIR (cmake) ist veraltet.
QSCXMLC_NAMESPACE|NAMESPACE <namespace>QSCXMLC_NAMESPACE (qmake) oder NAMESPACE (cmake) gibt den Namespace für die generierten Klassen an.
QSCXMLC_ARGUMENTS|OPTIONS <options>QSCXMLC_ARGUMENTS (qmake) bzw. OPTIONS (cmake) ermöglicht die Angabe zusätzlicher Optionen für den qscxmlc Compiler. QSCXMLC_ARGUMENTS mit cmake ist veraltet.

© 2025 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.