Qt6 モジュール

Meson 0.57.0の新機能

Qt6モジュールは、Qtに必要な様々なツールと手順を自動的に処理するためのメソッドを提供します。

警告: 0.63.0より前のバージョンでは、Qtツールの場所がlibexecサブディレクトリに変更され、ツール名にQtのメジャーバージョン番号のみが付加されるようになったため(例: qmake6)、MesonはQt 6.1以降を検出できませんでした。

compile_resources

0.59.0の新機能

Qtのリソースコレクションファイル(.qrc)をC++ファイルにコンパイルします。

位置引数は必要ありません。以下のキーワード引数を使用します。

  • name (文字列 | 空): 指定された場合、単一の.cppファイルが生成され、すべてのqrcファイルの出力がこのファイルに結合されます。指定されない場合、各qrcファイルは独自のcppファイルに書き込まれます。
  • sources (ファイル | 文字列 | custom_target | custom_targetインデックス | generator_output)[]: トランスパイルするソースのリスト。必須です。少なくとも1つのソースが必要です。
    0.60.0の新機能: custom_target、custom_target_index、generator_outputのサポート。
  • extra_args 文字列[]: qt-rccに直接渡す追加の引数。
  • method 文字列: Qtを検出するために使用するメソッド。 dependency()を参照してください。

compile_ui

0.59.0の新機能

Qtのuiファイル(.ui)をヘッダーファイルにコンパイルします。

位置引数は必要ありません。以下のキーワード引数を使用します。

  • sources (ファイル | 文字列 | custom_target | custom_targetインデックス | generator_output)[]: トランスパイルするソースのリスト。必須です。少なくとも1つのソースが必要です。
    0.60.0の新機能: custom_target、custom_target_index、generator_outputのサポート。
  • extra_args 文字列[]: qt-uicに直接渡す追加の引数。
  • method 文字列: Qtを検出するために使用するメソッド。 dependency()を参照してください。
  • preserve_paths bool: 1.4.0の新機能trueの場合、出力ファイルはターゲットの一時ディレクトリ内でディレクトリ構造を維持する必要があることを指定します。例えば、subdir/one.inputというファイルが処理されると、trueの場合は{ターゲットのプライベートディレクトリ}/subdir/one.outfalse(デフォルト)の場合は{ターゲットのプライベートディレクトリ}/one.outというファイルが生成されます。

compile_moc

0.59.0の新機能

Qtのmocファイル(.moc)をヘッダーファイルおよび/またはソースファイルにコンパイルします。キーワード引数headerssourcesの少なくとも一方が指定されている必要があります。

位置引数は必要ありません。以下のキーワード引数を使用します。

  • sources (ファイル | 文字列 | custom_target | custom_targetインデックス | generator_output)[]: 手動でインクルードするための.mocファイルにトランスパイルするソースのリスト。
    0.60.0の新機能: custom_target、custom_target_index、generator_outputのサポート。
  • headers (ファイル | 文字列 | custom_target | custom_targetインデックス | generator_output)[]: .cppファイルにトランスパイルするヘッダーのリスト。
    0.60.0の新機能: custom_target、custom_target_index、generator_outputのサポート。
  • extra_args 文字列[]: qt-mocに直接渡す追加の引数。
  • method 文字列: Qtを検出するために使用するメソッド。 dependency()を参照してください。
  • dependencies: mocで使用されるインクルードディレクトリを持つ依存オブジェクト。
  • include_directories (文字列 | IncludeDirectory)[]: .mocファイルをトランスパイルする際に使用するinclude_directory()オブジェクトのリスト。
  • preserve_paths bool: 1.4.0の新機能trueの場合、出力ファイルはターゲットの一時ディレクトリ内でディレクトリ構造を維持する必要があることを指定します。例えば、subdir/one.inputというファイルが処理されると、trueの場合は{ターゲットのプライベートディレクトリ}/subdir/one.outfalse(デフォルト)の場合は{ターゲットのプライベートディレクトリ}/one.outというファイルが生成されます。

preprocess

代わりにcompile_resourcescompile_uicompile_mocを使用することを検討してください。

moc、uic、rccのソースを受け取り、それらをコンパイル用のC++ファイルに変換します。

シグネチャは次のとおりです: qt.preprocess(name: str | None, *sources: str)

nameパラメータが渡されると、すべてのrccファイルは単一の出力ファイルに書き込まれます。

0.59.0で非推奨: 可変長引数sourcesとキーワード引数sourcesで指定されたファイルは、プリプロセッサプログラムを通して変更されずに渡されました。これは行わないでください - preprocess()の出力を別のソースリストに追加してください。

sources = files('a.cpp', 'main.cpp', 'bar.c')
sources += qt.preprocess(qresources : ['resources'])

このメソッドは、以下のキーワード引数を受け取ります。

  • qresources (文字列 | ファイル)[]: RCCコンパイラに渡されます。
  • ui_files: (文字列 | ファイル | CustomTarget)[]: uicコンパイラに渡されます。
  • moc_sources: (文字列 | ファイル | CustomTarget)[]: mocコンパイラに渡されます。これらは、#includeされることを意図した.mocファイルに変換されます。
  • moc_headers: (文字列 | ファイル | CustomTarget)[]: mocコンパイラに渡されます。これらは.cppファイルに変換されます。
  • include_directories (IncludeDirectories | 文字列)[], mocのヘッダー検索パスに追加するディレクトリ。
  • moc_extra_arguments 文字列[]: mocへの追加の引数。
  • uic_extra_arguments 文字列[]: uicへの追加の引数。
  • rcc_extra_arguments 文字列[]: rccへの追加の引数。
  • dependencies Dependency[]: mocに必要な依存オブジェクト。
  • 0.59.0で非推奨。: sources: 変更されずに出力に追加される追加のソースのリスト。
  • preserve_paths bool: 1.4.0以降trueの場合、出力ファイルはターゲットの一時ディレクトリ内でディレクトリ構造を維持する必要があることを指定します。例えば、subdir/one.inputというファイルが処理されると、trueの場合は{ターゲットのプライベートディレクトリ}/subdir/one.outfalse(デフォルト)の場合は{ターゲットのプライベートディレクトリ}/one.outというファイルが生成されます。

コンパイルターゲットに渡すターゲットとソースの配列を返します。

compile_translations

このメソッドは、lreleaseを使用して翻訳ファイルを作成するために必要なターゲットを生成します。位置引数は必要ありません。以下のキーワード引数を使用します。

  • ts_files (ファイル | 文字列 | custom_target | custom_targetインデックス | generator_output)[]: Qtのlupdateツールによって生成された入力翻訳ファイルのリスト。
    0.60.0の新機能: custom_target、custom_target_index、generator_outputのサポート。
  • install bool: trueの場合、インストールステップでこのターゲットがインストールされます(オプション)。
  • install_dir 文字列: インストール先のディレクトリ(オプション)。
  • build_by_default bool: trueに設定すると、meson compileを実行したときにこのターゲットがデフォルトでビルドされます。デフォルト値はfalseです(オプション)。
  • qresource 文字列: ts_filesを抽出するrccソースファイル。ts_filesキーワード引数と一緒に使用することはできません。
  • rcc_extra_arguments 文字列[]: rccへの追加の引数(オプション)。`qresource`と一緒に使用する場合。

コンパイルされた翻訳のカスタムターゲットのリスト、またはqresourceファイルを使用している場合は、処理されたソースファイルを含む単一のカスタムターゲットを返します。これはメインビルドターゲットに渡される必要があります。

has_tools

このメソッドは、このモジュールで使用されるすべてのツールが見つかった場合はtrueを、そうでない場合はfalseを返します。

オプションのQtコードをコンパイルするために使用してください。

qt6 = import('qt6')
if qt6.has_tools(required: get_option('qt_feature'))
  moc_files = qt6.preprocess(...)
  ...
endif

このメソッドは、以下のキーワード引数を受け取ります。

  • required bool | FeatureOption: デフォルトでは、requiredfalseに設定されています。requiredtrueまたは有効なfeatureに設定され、一部のツールが見つからない場合、Mesonは処理を中止します。
  • method 文字列: Qtを検出するために使用するメソッド。 dependency()を参照してください。
  • tools: 文字列[]: 1.6.0以降。チェックするツールのリスト。テスト可能なツールはmocuicrcclreleaseです。デフォルトでは、tools['moc', 'uic', 'rcc', 'lrelease']に設定されています。

依存関係

Qt依存関係を参照してください。

'modules'引数は、プロジェクトにQtモジュールを含めるために使用されます。モジュールのリストについては、Qtのドキュメントを参照してください。

'private_headers'引数は、Qtのモジュールのプライベートヘッダーの使用を許可します。

簡単な例を以下に示します。

qt6 = import('qt6')
qt6_dep = dependency('qt6', modules: ['Core', 'Gui'])
inc = include_directories('includes')
moc_files = qt6.compile_moc(headers : 'myclass.h',
                            extra_arguments: ['-DMAKES_MY_MOC_HEADER_COMPILE'],
                            include_directories: inc,
                            dependencies: qt6_dep)
translations = qt6.compile_translations(ts_files : 'myTranslation_fr.ts', build_by_default : true)
executable('myprog', 'main.cpp', 'myclass.cpp', moc_files,
           include_directories: inc,
           dependencies : qt6_dep)

場合によっては、qresourceファイルを使用してバイナリに翻訳が埋め込まれます。この場合、tsファイルを明示的にリストする必要はありませんが、qresourceファイルにリストされている構築されたqmファイルから推測されます。例えば

qt6 = import('qt6')
qt6_dep = dependency('qt6', modules: ['Core', 'Gui'])
lang_cpp = qt6.compile_translations(qresource: 'lang.qrc')
executable('myprog', 'main.cpp', lang_cpp,
           dependencies: qt6_dep)

検索の結果は次のとおりです。