2. 开发环境搭建
Qt Quick 与 C++ 混合开发的第一步,不是急着写 QML,而是把工具链、Qt 版本和构建系统这三件事一次性理顺。环境搭建的质量,直接决定了后续编译速度、调试体验以及跨平台迁移的成本。本节围绕 Qt Creator 安装配置、Qt 版本选择、CMake 与 qmake 对比,以及第一个混合项目的创建流程展开,帮助你建立一套可复用、可迁移的工程起点。
一、核心原理:混合开发环境的三层结构
Qt Quick 与 C++ 混合项目本质上由三层组成:工具层(Qt Creator、编译器、调试器)、框架层(Qt 版本、Qt Quick 模块、Qt C++ 库)、构建层(CMake 或 qmake 生成的构建规则)。三者必须版本匹配,否则会出现“QML 模块找不到”“C++ 符号未定义”“调试器无法附加”等典型问题。
Qt Creator 是官方 IDE,集成了代码编辑、QML 实时预览、调试、性能分析等功能。它本身不包含 Qt 库,需要单独安装 Qt SDK 或在“Qt 版本”中手动注册已安装的 Qt。安装时建议勾选 Qt Creator、对应 Qt 版本、MinGW 或 MSVC 编译器,以及 CMake、Ninja 等构建工具。
二、Qt 版本选择:LTS 优先,按目标平台决策
Qt 版本选择没有绝对答案,但有一条稳定原则:生产项目优先选择 LTS 版本。Qt 5.15 LTS 成熟稳定、资料丰富,适合维护既有项目;Qt 6.2 / 6.5 LTS 是当前新项目的主流选择,对 CMake 支持更彻底,QML 编译器与图形栈也更现代。
| 版本 | 定位 | 构建系统建议 | 适用场景 |
|---|---|---|---|
| Qt 5.15 LTS | 长期维护,生态成熟 | qmake 或 CMake | 存量项目、嵌入式旧平台 |
| Qt 6.2 LTS | Qt 6 首个 LTS | CMake 优先 | 新项目起步、桌面与嵌入式 |
| Qt 6.5 LTS | 功能完善,模块齐全 | CMake | 推荐新项目使用 |
| Qt 6.x 最新版 | 尝鲜新特性 | CMake | 学习验证,不建议直接上生产 |
三、CMake 与 qmake 构建系统对比
qmake 是 Qt 传统构建工具,语法简洁,.pro 文件上手快,适合小型项目和旧教程。CMake 是 Qt 6 官方主推的构建系统,跨平台能力更强,生态更广,能更好地管理第三方库和现代 C++ 工程。
# CMakeLists.txt 片段(Qt 6 混合项目)
cmake_minimum_required(VERSION 3.16)
project(MixedDemo LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
find_package(Qt6 REQUIRED COMPONENTS Quick Gui Qml)
qt_add_executable(MixedDemo
main.cpp
backend.h
backend.cpp
)
qt_add_qml_module(MixedDemo
URI MixedDemo
VERSION 1.0
QML_FILES main.qml
)
target_link_libraries(MixedDemo PRIVATE Qt6::Quick Qt6::Gui Qt6::Qml)
# qmake 工程文件片段(.pro)
QT += quick qml
CONFIG += c++17
SOURCES += main.cpp backend.cpp
HEADERS += backend.h
RESOURCES += qml.qrc
QML_IMPORT_PATH += $$PWD
从对比看,CMake 的配置更显式,模块依赖、QML 模块注册、资源打包都通过命令完成,适合团队协作和持续集成;qmake 更“隐式”,写起来短,但在复杂依赖和多目标构建时容易失控。新项目建议直接使用 CMake。
四、第一个混合项目创建流程
- 打开 Qt Creator,选择
File → New Project → Application (Qt) → Qt Quick Application。 - 在构建系统页面选择
CMake,并勾选生成 QML 模块。 - 选择已注册的 Qt 6 套件(Kit),确认编译器与调试器均可用。
- 项目创建后,在
main.cpp中注册 C++ 类型,例如qmlRegisterType<Backend>("MixedDemo", 1, 0, "Backend");。 - 在
main.qml中导入模块并实例化:import MixedDemo 1.0,然后使用Backend { }。 - 点击运行,确认 QML 界面显示且 C++ 对象可被 QML 访问。
五、常见误区与复盘
- 误区一:Qt Creator 版本等于 Qt 版本。 Qt Creator 只是 IDE,Qt 库版本需在“Preferences → Kits → Qt Versions”中单独配置。
- 误区二:CMake 和 qmake 混用。 同一项目不要同时维护
CMakeLists.txt和.pro,否则构建缓存和 IDE 索引会互相干扰。 - 误区三:忽略 QML 模块 URI。
qt_add_qml_module中的 URI 必须与 QML 中import的模块名一致,否则运行时报“module not installed”。 - 误区四:构建目录污染源码目录。 建议使用影子构建(Shadow Build),把构建产物放在独立目录,便于清理和切换套件。
QQmlApplicationEngine failed to load component,优先检查 QML 文件是否被加入 QML_FILES、模块 URI 是否匹配、以及 Qt Quick 模块是否被 find_package 正确找到。