Qt SCXML コンパイラ (qscxmlc) の使用法

qscxmlc ツールは .scxml ファイルを読み込み、SCXML で定義されたステートマシンを実装するクラスを含む C++ ソースファイルとヘッダファイルを生成します。

使用方法

qscxmlc ツールは、プロジェクトファイルのscxml ライブラリにリンクされ、STATECHARTS またはqt_add_statecharts という特別なビルドディレクティブを使って.scxml ファイルが指定されると、自動的に呼び出されます。

cmake を使用する場合:

find_package(Qt6 REQUIRED COMPONENTS Scxml)
target_link_libraries(mytarget PRIVATE Qt6::Scxml)
qt_add_statecharts(mytarget
    MyStatemachine.scxml
)

qmakeを使用する場合:

QT += scxml
STATECHARTS = MyStatemachine.scxml

上記の定義で、qmake またはcmake は、qscxmlc を呼び出して MyStatemachine.h と MyStatemachine.cpp を生成し、ヘッダーとソースとしてプロジェクトに適切に追加します。

デフォルトでは、ステート・マシンを実装する生成されたクラスの名前は、<scxml> ルート要素のname属性と一致します。

また、qscxmlc ツールを手動で起動し、生成されたヘッダー・ファイルとソース・ファイルをプロジェクトの通常のソース・ファイルとして使用することもできます。これらのソース・ファイルをcmake プロジェクトの一部として使用する場合、この例に示すように、CMakeLists.txt ファイルで自動 moc を無効にする必要があります:

set_source_files_properties(statemachine.h PROPERTIES SKIP_AUTOMOC TRUE)

これを省略すると、コンパイル時にシンボルの重複エラーが発生します。

コマンドラインオプション

qscxmlc ツールは以下のコマンドラインオプションをサポートしています:

オプション説明
--namespace <namespace>生成されたクラスを指定されたネームスペースに配置します。
-o <base/out/name>出力ファイルのベース名。これにはパスを含めることができます。何も指定しない場合は、入力ファイルのベース名が使用されます。
--header <header/out>出力ヘッダー・ファイルの名前。何も指定しない場合は、ベース名に .h が追加されます。
--impl <cpp/out>出力ヘッダー・ファイルの名前。何も指定しない場合は、ベース名に .cpp が追加されます。
--classname <StateMachineClassName>生成されるステート・マシンのクラス名。何も指定されない場合、<scxml>タグのname属性の値が使用されます。この属性も指定されていない場合、ベース名(パスを除く)は入力ファイル名から取られます。
--statemethodsステートのアクセッサメソッドとシグナルメソッドを追加しました。こうすることで、プレーンなQObject::connect ()でステートの変更に接続したり、ステートが現在アクティブかどうかを調べるメソッドを直接呼び出したりできる。

qmakeCMake プロジェクト・ファイルは以下のオプションをサポートしています:

オプション説明
QSCXMLC_DIR|OUTPUT_DIRECTORY <directory>QSCXMLC_DIR (qmake) または (cmake) は、出力ファイルのディレクトリを指定します。OUTPUT_DIR (cmake) は廃止予定です。OUTPUT_DIRECTORY
QSCXMLC_NAMESPACE|NAMESPACE <namespace>QSCXMLC_NAMESPACE (qmake) または (cmake) は、生成されるクラスのネームスペースを指定します。NAMESPACE
QSCXMLC_ARGUMENTS|OPTIONS <options>QSCXMLC_ARGUMENTS (qmake) または (cmake) では、 コンパイラの追加オプションを指定できます。cmake での QSCXMLC_ARGUMENTS は非推奨になりました。OPTIONS qscxmlc

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