在 构建 C++ 控制台应用程序 , we showed the CMakeLists.txt file for a simple console application. We will now create a QML application that uses the Qt Quick 模块。
Here is the full project file:
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)
Let's walk through the changes we have made, compared to the console application
CMakeLists.txt
:
...
find_package(Qt6 6.5 COMPONENTS Quick REQUIRED)
在
find_package()
调用,我们替换
Core
with
Quick
. CMake will therefore load the
Qt6Quick
模块并提供
Qt6::Quick
targets we later link against. CMake will also automatically load packages Quick depends on, like
Qt6Qml
, which defines the
qt_add_qml_module()
command we use below.
We also require Qt 6.5 or newer.
qt_standard_project_setup(REQUIRES 6.5)
The
qt_standard_project_setup()
command sets project-wide defaults for a typical Qt application. By adding
REQUIRES 6.5
, we enable the policy
QTP0001
, which defines a default resource prefix for QML modules created by
qt_add_qml_module()
.
...
qt_add_qml_module(helloworld
URI hello
QML_FILES
main.qml
FramedImage.qml
RESOURCES
img/world.png
)
qt_add_qml_module()
adds a QML module named
hello
to the executable, consisting of two QML files and one image. Due to
QTP0001
, the module will be available at
qrc:/qt/qml/hello
in the resource file system, with
qrc:/qt/qml/
being one of the QML engine's default
import paths
.
qt_add_qml_module()
also does optimization steps like running the
QML 脚本编译器
, and defining a
helloworld_qmllint
target which you can run to get additional suggestions about the
.qml
files from
qmllint
.
target_link_libraries(helloworld PRIVATE Qt6::Quick)
在
target_link_libraries()
command, we link our executable against
Qt6::Quick
. This automatically also links against targets
Qt6::Quick
depends on, including
Qt6::Qml
and
Qt6::Core
.