SCXML呼び出し

コンパイルされたネストされたステートマシンを起動します。

Invokeは生成されたネストされたステートマシンで<invoke> 要素を使用する方法を示します。ここで、SCXML ファイルは C++ クラスにコンパイルされます。<invoke> 要素は外部サービスのインスタンスを生成するために使用されます。

例の実行

Qt Creator からサンプルを実行するには、Welcome モードを開き、Examples からサンプルを選択します。詳細については、Building and Running an Example を参照してください。

ステートマシンの起動

statemachine.scxml で、http://www.w3.org/TR/scxml/型のDirectionsStateMachineという名前のステートマシンを指定して起動します:

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

ステートマシンのコンパイル

以下の行をサンプルのビルドファイルに追加して Qt SCXML モジュールとリンクします。

qmakeを使う場合はinvoke.proを使います:
QT += qml scxml

次に、コンパイルするステートマシンを指定します:

STATECHARTS = statemachine.scxml
cmake を使用する場合はCMakeLists.txt を指定します:
find_package(Qt6 REQUIRED COMPONENTS Core Gui Qml Scxml)

target_link_libraries(invoke PRIVATE
    Qt6::Core
    Qt6::Gui
    Qt6::Qml
    Qt6::Scxml
)

次に、コンパイルするステートマシンを指定します:

qt6_add_statecharts(invoke
    statemachine.scxml
)

statechartディレクティブSTATECHARTSまたはqt6_add_statechartsはQt SCXML Compiler,qscxmlc 。自動的に実行され、statemachine.hと statemachine.cppが生成され、コンパイルのためのヘッダーとソースとして適切に追加されます。

QML要素としてのステートマシンの宣言

ステートマシンは以下のようにQML要素として宣言されます:

struct DirectionsStateMachineRegistration
{
    Q_GADGET
    QML_FOREIGN(DirectionsStateMachine)
    QML_NAMED_ELEMENT(DirectionsStateMachine)
    QML_ADDED_IN_VERSION(1, 0)
};

ステートマシンのインスタンス化

生成されたDirectionsStateMachine 要素を、MainView.qmlファイルで以下のようにインスタンス化します:

    DirectionsStateMachine {
        id: stateMachine
        running: true
    }

プロジェクト例 @ code.qt.io

例プロジェクト @ code.qt.io©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。