QMLアプリケーションのビルド

C++ コンソールアプリケーションのビルドでは、簡単なコンソールアプリケーションの CMakeLists.txt ファイルを紹介しました。ここでは、このモジュールを使った QML アプリケーションを作成します。 Qt Quickモジュールを使うQMLアプリケーションを作成します。

これが完全なプロジェクトファイルです:

cmake_minimum_required(VERSION 3.16)

project(hello VERSION 1.0 LANGUAGES CXX)

find_package(Qt6 6.2 COMPONENTS Quick Gui REQUIRED)

qt_standard_project_setup(REQUIRES 6.5)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

qt_add_executable(myapp
    main.cpp
)

qt_add_qml_module(myapp
    URI hello
    QML_FILES
        main.qml
        FramedImage.qml
    RESOURCES
        img/world.png
)

target_link_libraries(myapp PRIVATE Qt6::Gui Qt6::Quick)

それでは、変更点を説明しましょう。find_package の呼び出しでは、CoreQuick に置き換えています。これにより、Qt6Quick モジュールの場所が特定され、後でリンクするQt6::Quick ターゲットが提供されます。

find_package(Qt6 6.2 COMPONENTS Quick Gui REQUIRED)

qt_standard_project_setup を呼び出し、CMAKE_CXX_STANDARDCMAKE_CXX_STANDARD_REQUIRED を指定します。REQUIRES 6.5qt_standard_project_setup に渡すことで、qt_add_qml_module の便利なデフォルトにオプトインします。これにより、バージョン 6.5 までのQt CMake ポリシー、特にQMLモジュールのデフォルトリソースプレフィックスを定義するQTP0001が有効になります。

qt_standard_project_setup(REQUIRES 6.5)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

Qt6::QuickQt6::Core に依存しているため、アプリケーションは に対してリンクされます。

qt_add_executableはアプリケーションターゲットを作成し、確定します:

qt_add_executable(myapp
    main.cpp
)

qt_add_qml_moduleは実行ファイルのターゲット、URI、モジュールのバージョン、 QML ファイルのリストを渡し、myapp が QML モジュールになるようにします。これにより、QMLファイルはリソースファイルシステムのqrc:/qt/qml/${URI} に配置されます。さらに、qt_add_qml_module は、qmlcachegen の実行を保証します。さらに、myapp_qmllint ターゲットを作成し、QML_FILES 内のファイルに対してqmllint を実行します。

qt_add_qml_module(myapp
    URI hello
    QML_FILES
        main.qml
        FramedImage.qml
    RESOURCES
        img/world.png
)

参照されるリソースを追加することで、QMLファイルと同じルートパス(リソースファイルシス テム)の下にあるアプリケーションが自動的に追加されます。リソースシステム内のパスをソースディレクトリやビルドディレクトリ内のパスと一致させておくことで、 FramedImage.qmlからの相対パスで解決される画像が常に見つかるようになります。main.qmlをそこからロードする場合はリソースファイルシステム内のイメージを参照し、qml ツールでレビューする場合は実際のファイルシステム内のイメージを参照します。

target_link_libraries コマンドでは、Qt6::Core ではなくQt6::Quick に対してリンクします。

target_link_libraries(myapp PRIVATE Qt6::Gui 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.