このページでは

Qt SCXML 概要

Qt SCXML モジュールは、State Chart XML(SCXML)ファイルから作成されたステートマシンをQtアプリケーションに組み込むためのクラスを提供します。SCXMLファイルは、SCXMLコンプライアンスに記載されている制限事項および拡張機能に準拠している限り、テキストエディタやシミュレータなど、適切なツールを使用して作成できます。

アプリケーションロジックの一部を、カプセル化されたSCXMLファイルに置き換えることができます。これにより、Qt Quick またはQt Widgets を使用することで、アプリケーションロジックとユーザーインターフェースの実装を明確に分離することが可能になります。

Qt SCXML モジュールは、State Machine フレームワークとは異なり、 Qt State Machine 点で異なります。Qt SCXML は、準拠したSCXMLドキュメントを解析・処理できる準拠プロセッサを提供します。Qt SCXML では、ステートマシンは個別のSCXMLファイルから読み込まれ、QScxmlStateMachine クラスをインスタンス化し、SCXMLファイルを動的に読み込むか、Qt SCXML コンパイラを使用してQScxmlStateMachine のサブクラスを生成し、それをインスタンス化することで、Qtアプリケーションに統合されます。 SCXMLドキュメントとの通信は、QScxmlStateMachine クラスのシグナルおよびメソッドによって行われます。

状態マシンに関する基本的な概念である「状態」、「遷移」、「イベント」は、SCXML仕様書に基づいています。 ステートチャートは、システムが刺激にどのように反応するかをグラフィカルにモデル化する方法を提供します。これは、システムが取り得る状態と、システムがある状態から別の状態へどのように移行するか(状態間の遷移)を定義することによって行われます。 イベント駆動型システム(Qt アプリケーションなど)の重要な特徴は、その挙動が多くの場合、直近または現在のイベントだけでなく、それに先行するイベントにも依存することです。ステートチャートを使用すると、この情報を簡単に表現できます。

Qt SCXML QObjects はQtのメタオブジェクトシステムと緊密に統合されています。例えば、状態間の遷移はシグナルによってトリガーすることができ、 のプロパティを設定したりメソッドを呼び出したりするように状態を構成することも可能です。Qtのイベントシステムは、ステートマシンを駆動するために使用されます。

Qt SCXML のステートグラフは階層構造となっています。ステートは他のステート内にネストすることができ、ステートマシンの現在の構成は、現在アクティブなステートの集合で構成されます。

データモデル

Qt SCXML は、準拠するSCXMLプロセッサがサポートしなければならないnullデータモデルと、ECMAScriptデータモデルをサポートしています。さらに、Qt SCXML は、QScxmlCppDataModel クラスによって実装される独自のC++データモデルを提供しています。 このクラスを使用することで、expr属性や<script> 要素に対するC++コードを記述できます。データモデルのデータ部分は、QScxmlCppDataModel のサブクラスによって支えられており、Qt SCXML コンパイラはこのサブクラスに対してディスパッチメソッドを生成します。

Qt SCXML コンパイラ

Qt SCXML コンパイラ(qscxmlc )は、.scxmlファイルを読み込み、SCXMLで定義されたステートマシンを実装するクラスを含むC++ソースファイルおよびヘッダーファイルを生成します。コンパイラの使用方法の詳細については、「Qt SCXML コンパイラ(qscxmlc)の使用」を参照してください。

動的に作成された状態マシンも、コンパイルされた状態マシンも、動作は同じであり、プロパティ、状態、データモデルなども同じです。両者の違いは、インスタンス化の方法のみです。詳細については、「状態マシンのインスタンス化」および「Qt SCXML の例」を参照してください。

ロギングカテゴリ

Qt SCXML モジュールは、以下のロギングカテゴリをエクスポートします:

ロギングカテゴリ説明
qscxmlLogQt SCXML モジュールのログを有効にします
scxmlLogSCXMLドキュメントのログを有効にします

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