1. 开发环境准备在Windows平台上使用CLion进行QGroundControlQGC二次开发首先需要搭建完整的开发环境。我最近在Qt 6.8.3环境下进行QGC v5.0.4的开发时发现官方文档对最新Qt版本的支持说明不够详细这里分享我的实战经验。系统要求方面我推荐使用Windows 10/11 64位系统至少16GB内存。CLion版本需要2023.3或更高实测2024.1版本对Qt6的支持更好。Qt选择6.8.3 MSVC 2022 64位编译套件这是目前最稳定的组合。CMake建议3.27Python需要3.10用于脚本工具。注意QGC官方尚未完全适配Qt6但从v5.0.4开始可以在Qt6上构建。如果遇到问题可以回退到Qt5.15 LTS版本。安装Qt时有个小技巧使用Qt在线安装器时除了选择MSVC 2022 64位组件外建议勾选Qt Creator用于验证环境Qt Tools中的CMake、Ninja可选Android工具链如需跨平台开发2. Qt环境配置2.1 安装Qt 6.8.3我习惯将Qt安装在D盘避免路径问题例如D:\Qt\6.8.3。安装完成后需要配置两个关键环境变量QTDIRD:\Qt\6.8.3\msvc2022_64 PATH%QTDIR%\bin;%PATH%验证Qt安装是否成功qmake --version # 应输出类似QMake version 3.1 Using Qt version 6.8.3 in D:/Qt/6.8.3/msvc2022_64/lib2.2 配置CLion工具链CLion中需要正确配置工具链进入Settings Build, Execution, Deployment Toolchains添加Visual Studio工具链自动检测MSVC编译器设置CMake路径为Qt自带的版本如D:\Qt\6.8.3\msvc2022_64\bin\cmake.exe构建工具选择Ninja性能比nmake快30%以上我遇到过CLion无法自动检测MSVC的问题解决方法是在VS Developer Command Prompt中启动CLionC:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\VsDevCmd.bat -archx64 clion64.exe3. 获取QGC源代码3.1 克隆仓库建议使用SSH方式克隆避免网络问题git clone gitgithub.com:mavlink/qgroundcontrol.git cd qgroundcontrol git checkout v5.0.43.2 初始化子模块子模块包含关键依赖必须完整初始化git submodule update --init --recursive如果遇到子模块下载失败特别是国内网络环境可以修改.gitmodules文件中的URL[submodule cmake/cmake_modules] path cmake/cmake_modules url https://gitee.com/mirrors/cmake-modules.git4. CMake配置技巧4.1 创建CMake Presets在项目根目录创建CMakePresets.json可以简化配置{ version: 3, configurePresets: [ { name: qt6-msvc, displayName: Qt6 MSVC2022, generator: Ninja, binaryDir: ${sourceDir}/build, cacheVariables: { CMAKE_PREFIX_PATH: D:/Qt/6.8.3/msvc2022_64, QT_MAJOR_VERSION: 6, CMAKE_BUILD_TYPE: Debug } } ] }4.2 解决Qt路径问题如果CMake报错找不到Qt手动修改qgroundcontrol/cmake/QtSetup.cmakeset(Qt6_DIR D:/Qt/6.8.3/msvc2022_64/lib/cmake/Qt6)5. 构建问题排错指南5.1 Vulkan缺失问题构建时可能出现Could NOT find WrapVulkanHeaders (missing: Vulkan_INCLUDE_DIR)解决方法安装Vulkan SDK添加环境变量VULKAN_SDKC:\VulkanSDK\1.3.250.1 PATH%VULKAN_SDK%\Bin;%PATH%5.2 SDL2游戏控制器数据库缺失错误提示gamecontrollerdb.txt missing临时解决方案# 在CMakeLists.txt中添加 if(NOT EXISTS ${CMAKE_SOURCE_DIR}/libs/sdl2/SDL_gamecontrollerdb.txt) file(DOWNLOAD https://raw.githubusercontent.com/gabomdq/SDL_GameControllerDB/master/gamecontrollerdb.txt ${CMAKE_SOURCE_DIR}/libs/sdl2/SDL_gamecontrollerdb.txt ) endif()5.3 APM插件编译问题如果不需要APM插件可以通过CMake选项禁用cmake -DQGC_DISABLE_APM_PLUGINON ..如需保留插件但遇到编译错误检查src/FirmwarePlugin/APM/CMakeLists.txttarget_link_libraries(APMFirmwarePlugin PRIVATE Qt6::Core Qt6::Qml )6. 调试技巧6.1 启用QML调试在CMake配置中添加cmake -DQGC_DEBUG_QMLON ..这会启用QML语法高亮错误实时属性检查控制台日志输出6.2 性能优化构建发布版本建议使用cmake -DCMAKE_BUILD_TYPERelWithDebInfo ..对比测试显示RelWithDebInfo比Debug模式快3-5倍同时保留调试符号。7. 扩展开发建议7.1 创建自定义插件新建插件的基本步骤在src/Plugins下创建插件目录编写YourPlugin/YourPlugin.json元数据文件实现核心类继承QGCTool接口在src/QGCCorePlugin.cc中注册插件7.2 界面定制技巧修改QML界面时注意优先覆盖而不是修改原始文件使用QQmlApplicationEngine::addImportPath()添加自定义组件路径主题颜色通过QGCPalette全局调色板管理8. 持续集成方案推荐使用GitHub Actions自动化构建name: Windows Build on: [push] jobs: build: runs-on: windows-latest steps: - uses: actions/checkoutv3 - name: Setup Qt uses: jurplel/install-qt-actionv3 with: version: 6.8.3 arch: win64_msvc2022 - name: Build run: | cmake -B build -G Ninja -DCMAKE_PREFIX_PATH${{ env.QT_DIR }} . cmake --build build这套配置在i7-12700H/32GB内存的机器上完整构建约需8分钟增量构建仅需30秒左右。遇到最棘手的问题是Vulkan依赖和APM插件兼容性通过本文的解决方案应该能顺利构建。建议定期同步上游仓库关注GitHub Issues中的Qt6适配进展。