QMLアプリケーションのビルド
C++ コンソールアプリケーションのビルドでは、単純なコンソールアプリケーションの CMakeLists.txt ファイルを示しました。ここでは、このモジュールを使った QML アプリケーションを作成します。 Qt Quickモジュールを使うQMLアプリケーションを作成します。
これがプロジェクトファイルです:
cmake_minimum_required(VERSION 3.16)
project(helloworld VERSION 1.0.0 LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt6 6.5 COMPONENTS Quick REQUIRED)
qt_standard_project_setup(REQUIRES 6.5)
qt_add_executable(helloworld
main.cpp
)
qt_add_qml_module(helloworld
URI hello
QML_FILES
main.qml
FramedImage.qml
RESOURCES
img/world.png
)
target_link_libraries(helloworld PRIVATE Qt6::Quick)コンソールアプリケーションCMakeLists.txt と比較して、どのような変更を加えたかを見ていきましょう:
... find_package(Qt6 6.5 COMPONENTS Quick REQUIRED)
find_package() の呼び出しで、Core をQuick に置き換えています。そのため、CMakeはQt6Quick モジュールをロードし、後でリンクするQt6::Quick ターゲットを提供します。CMakeは、Quickが依存するパッケージも自動的にロードします。例えば、Qt6Qml は、以下で使用するqt_add_qml_module()コマンドを定義しています。
また、Qt 6.5以降が必要です。
qt_standard_project_setup(REQUIRES 6.5)
qt_standard_project_setup()コマンドは、典型的な Qt アプリケーションのプロジェクト全体のデフォルトを設定します。REQUIRES 6.5 を追加することで、qt_add_qml_module() で作成された QML モジュールのデフォルトリソースプレフィックスを定義するポリシーQTP0001 を有効にします。
...
qt_add_qml_module(helloworld
URI hello
QML_FILES
main.qml
FramedImage.qml
RESOURCES
img/world.png
)qt_add_qml_module()は、2つのQMLファイルと1つのイメージからなるhello というQMLモジュールを実行ファイルに追加します。QTP0001により、このモジュールはリソースファイルシステムのqrc:/qt/qml/hello 。qrc:/qt/qml/ はQMLエンジンのデフォルトインポートパスのひとつです。
qt_add_qml_module()は QMLスクリプトコンパイラの実行や、qmllintから .qml ファイルに関する追加提案を得るために実行できるhelloworld_qmllint ターゲットの定義などの最適化ステップも実行します。
target_link_libraries(helloworld PRIVATE Qt6::Quick)
target_link_libraries() コマンドでは、実行ファイルをQt6::Quick に対してリンクします。これにより、Qt6::Qml やQt6::Core など、Qt6::Quick が依存するターゲットも自動的にリンクされます。
© 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.