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 ()でステートの変更に接続したり、ステートが現在アクティブかどうかを調べるメソッドを直接呼び出したりできる。 |
qmake
とCMake
プロジェクト・ファイルは以下のオプションをサポートしています:
オプション | 説明 |
---|---|
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.