Auf dieser Seite

SCXML Invoke

Ruft eine kompilierte verschachtelte Zustandsmaschine auf.

Fenster mit vier Feldern: „Geh nirgendwohin“, „Geh irgendwohin“, „Geh dorthin“ und „Geh hierhin“

„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:

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 scxml

Anschließend legen wir die zu kompilierende Zustandsmaschine fest:

STATECHARTS = statemachine.scxml
CMakeLists.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
    }

Beispielprojekt @ code.qt.io

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