构建一个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调用中,我们将Core替换为Quick。这将定位到Qt6Quick模块,并提供我们稍后链接的Qt6::Quick目标。

find_package(Qt6 6.2 COMPONENTS Quick Gui REQUIRED)

我们调用qt_standard_project_setup,并指定CMAKE_CXX_STANDARDCMAKE_CXX_STANDARD_REQUIRED。通过将REQUIRES 6.5传递给qt_standard_project_setup,我们选择启用qt_add_qml_module的有用默认设置。它启用了所有版本的Qt CMake策略,特别是定义QML模块的理性默认资源前缀的QTP0001

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

请注意,应用程序仍然会链接到Qt6::Core,因为Qt6::Quick依赖于它。

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目标,它会使用qmllint在QML_FILES中的文件上运行。

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::Quick而不是Qt6::Core进行链接。

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

© 2024 Qt公司有限公司。此处包含的文档贡献均为各自所有者的版权。所提供的文档受《由自由软件基金会发布的GNU自由文档许可证第1.3版》的条款约束。GNU自由文档许可证