Qt SCXML の概要

Qt SCXML モジュールは、ステートチャート XML(SCXML)ファイルから作成されたステートマシンを Qt アプリケーションに埋め込むためのクラスを提供します。SCXML ファイルは、SCXML Compliance に記述されている制限や拡張を除き、SCXML 仕様に準拠していれば、テキストエディタやシミュレータなどの適切なツールを使用して作成することができます。

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

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

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

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

Qt SCXML のステートグラフは階層構造になっています。ステートマシンの現在の構成は、現在アクティブなステートのセットで構成されます。

データモデル

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

Qt SCXML コンパイラ

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

動的に生成されたステートマシンもコンパイルされたステートマシンも同じように動作し、同じプロパティ、ステート、データモデルなどを持ちます。インスタンス化の方法が異なるだけです。詳細は、ステートマシンのインスタンス化とQt SCXML の例を参照してください。

ロギングカテゴリ

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

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

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