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

C++ コンソールアプリケーションのビルドでは、単純なコンソールアプリケーションの CMakeLists.txt ファイルを示しました。ここでは、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)

本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 ここで提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。