SCXML Invoke
Ruft eine kompilierte verschachtelte Zustandsmaschine auf.

„Invoke“ veranschaulicht die Verwendung des Elements „ <invoke> “ mit generierten verschachtelten Zustandsmaschinen, bei denen 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
Sie können das Beispiel wie folgt ausführen:
- Qt Creator
Öffnen Sie den Modus „ Welcome “ und wählen Sie das Beispiel unter „ Examples “ aus. Weitere Informationen finden Sie unter Qt Creator: Tutorial: Erstellen und Ausführen.
- Qt Extension for Visual Studio Code
Führen Sie den Befehl „ Qt: Open Qt examples “ über die Seite „ Command Palette “ aus und wählen Sie das Beispiel aus der Liste aus. Weitere Informationen finden Sie unter Qt Extension for Visual Studio Code: Tutorial: Erstellen und Ausführen.
Aufrufen der Zustandsmaschine
In „statemachine.scxml“ definieren wir eine Zustandsmaschine mit dem Namen „DirectionsStateMachine“ vom Typ „http://www.w3.org/TR/scxml/“, die 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 der Zustandsmaschine
Wir verknüpfen 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 scxmlAnschließend legen wir die zu kompilierende Zustandsmaschine fest:
STATECHARTS = statemachine.scxmlCMakeLists.txt bei 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
)Anschließend geben wir die zu kompilierende Zustandsmaschine an:
qt6_add_statecharts(invoke
statemachine.scxml
)Die Statechart-Direktiven STATECHARTS oder qt6_add_statecharts rufen den „ Qt SCXML Compiler“ auf ( qscxmlc), der automatisch ausgeführt wird, um die Dateien statemachine.h und statemachine.cpp zu generieren, die dann entsprechend als Header- und Quelldateien für die Kompilierung hinzugefügt werden.
Deklaration der Zustandsmaschine als QML-Element
Die Zustandsmaschine wird wie folgt als QML-Element deklariert:
struct DirectionsStateMachineRegistration
{
Q_GADGET
QML_FOREIGN(DirectionsStateMachine)
QML_NAMED_ELEMENT(DirectionsStateMachine)
QML_ADDED_IN_VERSION(1, 0)
};Instanziieren der Zustandsmaschine
Wir instanziieren das generierte „ DirectionsStateMachine “-Element in der Datei „MainView.qml“ wie folgt:
DirectionsStateMachine {
id: stateMachine
running: true
}© 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.