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 Quick + C++ 混合开发环境三层结构 工具层 Qt Creator IDE 编译器 MinGW / MSVC 调试器 GDB / CDB CMake / Ninja / qmake 框架层 Qt 6.x / Qt 5.15 LTS Qt Quick / QML 模块 Qt C++ 核心库 QML 引擎与类型注册 构建层 CMakeLists.txt .pro 工程文件 构建目录与缓存 可执行文件 / 部署包 三层版本必须匹配:Qt 版本 ↔ 编译器 ABI ↔ 构建系统规则

二、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 学习验证,不建议直接上生产
若目标平台是 Windows + MSVC,建议安装 Qt 时同时勾选 MSVC 2019/2022 套件;若使用 MinGW,则需保证 Qt 套件与 MinGW 版本一致,否则会出现 ABI 不兼容。

三、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。

四、第一个混合项目创建流程

  1. 打开 Qt Creator,选择 File → New Project → Application (Qt) → Qt Quick Application。
  2. 在构建系统页面选择 CMake,并勾选生成 QML 模块。
  3. 选择已注册的 Qt 6 套件(Kit),确认编译器与调试器均可用。
  4. 项目创建后,在 main.cpp 中注册 C++ 类型,例如 qmlRegisterType<Backend>("MixedDemo", 1, 0, "Backend");。
  5. 在 main.qml 中导入模块并实例化:import MixedDemo 1.0,然后使用 Backend { }。
  6. 点击运行,确认 QML 界面显示且 C++ 对象可被 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 正确找到。