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
    }

Beispielprojekt @ code.qt.io

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