SCXML-Aufruf
Ruft einen kompilierten verschachtelten Zustandsautomaten auf.
Invoke demonstriert die Verwendung des Elements <invoke>
mit generierten verschachtelten Zustandsautomaten, wobei die SCXML-Datei zu einer C++-Klasse kompiliert wird. Das Element <invoke>
wird verwendet, um eine Instanz eines externen Dienstes zu erstellen.
Ausführen des Beispiels
Zum Ausführen des Beispiels von Qt Creatorauszuführen, öffnen Sie den Modus Welcome und wählen Sie das Beispiel aus Examples aus. Weitere Informationen finden Sie unter Erstellen und Ausführen eines Beispiels.
Aufrufen der Zustandsmaschine
In statemachine.scxml geben wir einen Zustandsautomaten mit dem Namen DirectionsStateMachine vom Typ http://www.w3.org/TR/scxml/ an, der aufgerufen werden soll:
<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" name="DirectionsStateMachine" initial="anyplace" > <state id="anyplace"> <transition event="goNowhere" target="nowhere"/> <transition event="goSomewhere" target="somewhere"/> <state id="nowhere"/> <state id="somewhere"> <invoke type="http://www.w3.org/TR/scxml/"> <content> <scxml name="anywhere" version="1.0"> <state id="here"> <transition event="goThere" target="there"/> </state> <state id="there"> <transition event="goHere" target="here"/> </state> </scxml> </content> </invoke> </state> </state> </scxml>
Kompilieren des Zustandsautomaten
Wir linken gegen das Modul Qt SCXML, indem wir die folgenden Zeilen zu den Build-Dateien des Beispiels hinzufügen.
invoke.pro bei Verwendung von qmake:
QT += qml scxml
Dann geben wir den zu kompilierenden Zustandsautomaten an:
STATECHARTS = statemachine.scxml
CMakeLists.txt bei der Verwendung von cmake:
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Scxml) target_link_libraries(invoke PRIVATE Qt6::Core Qt6::Gui Qt6::Qml Qt6::Scxml )
Wir geben dann den zu kompilierenden Zustandsautomaten an:
qt6_add_statecharts(invoke statemachine.scxml )
Die Statechart-Direktiven STATECHARTS oder qt6_add_statecharts rufen den Qt SCXML Compiler, qscxmlc
, auf, der automatisch statemachine.h und statemachine.cpp generiert, die dann entsprechend als Header und Sourcen für die Kompilierung hinzugefügt werden.
Deklaration des Zustandsautomaten als QML-Element
Der Zustandsautomat wird wie folgt als QML-Element deklariert:
struct DirectionsStateMachineRegistration { Q_GADGET QML_FOREIGN(DirectionsStateMachine) QML_NAMED_ELEMENT(DirectionsStateMachine) QML_ADDED_IN_VERSION(1, 0) };
Instanziierung des Zustandsautomaten
Wir instanziieren das generierte DirectionsStateMachine
Element in der Datei MainView.qml wie folgt:
DirectionsStateMachine { id: stateMachine running: true }
© 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.