Auf dieser Seite

Verwendung des „ Qt SCXML “-Compilers (qscxmlc)

Das Tool „ qscxmlc “ liest eine .scxml-Datei ein und erzeugt C++-Quell- und Header-Dateien, die eine Klasse enthalten, welche eine in SCXML definierte Zustandsmaschine implementiert.

Verwendung

Das Tool „ qscxmlc “ wird automatisch aufgerufen, wenn das Projekt in der Projektdatei mit der Bibliothek „ scxml “ verknüpft ist und die zu verwendende „ .scxml “-Datei mithilfe der 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 oben genannten Definitionen ruft „ qmake “ oder „ cmake “ die Datei „ qscxmlc “ auf, um „MyStatemachine.h“ und „MyStatemachine.cpp“ zu generieren, und fügt diese entsprechend als Header- und Quelldateien zum Projekt hinzu.

Standardmäßig entspricht der Name der generierten Klasse, die die Zustandsmaschine implementiert, dem „name“-Attribut des Stammelements von <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 diese Quelldateien als Teil eines „ cmake “-Projekts verwendet werden, muss zusätzlich die automatische MOC-Generierung in der Datei „CMakeLists.txt“ deaktiviert werden, wie in diesem Beispiel gezeigt:

set_source_files_properties(statemachine.h PROPERTIES SKIP_AUTOMOC TRUE)

Wenn Sie dies unterlassen, treten bei der Kompilierung Fehler wegen doppelter Symbole auf.

Befehlszeilenoptionen

Das Tool „ qscxmlc “ unterstützt die folgenden Befehlszeilenoptionen:

OptionBeschreibung
--namespace <namespace>Die generierten Klassen in den angegebenen Namespace einfügen.
-o <base/out/name>Der Basisname der Ausgabedateien. Dieser kann einen Pfad enthalten. Wird kein Basisname angegeben, wird der Basisname der Eingabedatei verwendet.
--header <header/out>Der Name der Ausgabe-Header-Datei. Wird kein Name angegeben, wird „.h“ an den Basisnamen angehängt.
--impl <cpp/out>Der Name der Ausgabe-Header-Datei. Wenn kein Name angegeben wird, wird „.cpp“ an den Basisnamen angehängt.
--classname <StateMachineClassName>Der Klassenname der generierten Zustandsmaschine. Wird kein Name angegeben, wird der Wert des Attributs „name“ des <scxml>-Tags verwendet. Ist auch dieses Attribut nicht angegeben, wird der Basisname (ohne Pfad) aus dem Namen der Eingabedatei übernommen.
--statemethodsGeneriert zusätzliche Accessor- und Signal-Methoden für Zustände. Auf diese Weise können Sie mit einfachen QObject::connect()-Anrufen auf Zustandsänderungen reagieren und direkt eine Methode aufrufen, um festzustellen, ob ein Zustand derzeit 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 Namensraum für die generierten Klassen an.
QSCXMLC_ARGUMENTS|OPTIONS <options>QSCXMLC_ARGUMENTS (qmake) oder „ OPTIONS “ (cmake) ermöglicht die Angabe zusätzlicher Optionen für den „ qscxmlc “-Compiler. „QSCXMLC_ARGUMENTS“ mit cmake ist veraltet.

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