このページの内容

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

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

使用方法

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

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()を使用して状態の変更に接続したり、メソッドを直接呼び出して状態が現在アクティブかどうかを確認したりできます。

qmake およびCMake プロジェクトファイルでは、以下のオプションがサポートされています:

オプション説明
QSCXMLC_DIR|OUTPUT_DIRECTORY <directory>QSCXMLC_DIR (qmake) またはOUTPUT_DIRECTORY (cmake) は、出力ファイルのディレクトリを指定します。OUTPUT_DIR (cmake) は非推奨となりました。
QSCXMLC_NAMESPACE|NAMESPACE <namespace>QSCXMLC_NAMESPACE (qmake) またはNAMESPACE (cmake) は、生成されるクラスの名前空間を指定します。
QSCXMLC_ARGUMENTS|OPTIONS <options>QSCXMLC_ARGUMENTS (qmake) または `OPTIONS ` (cmake) は、qscxmlc コンパイラに対する追加オプションを指定できます。cmake における `QSCXMLC_ARGUMENTS` は非推奨となっています。

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