QGroundControl 5.0.8 源码主要框架分析
Part 1:仓库文件夹各自的作用
顶层 10 个文件夹
|
文件夹 |
作用 |
|
android/ |
Android 平台资源(manifest / gradle / res) |
|
cmake/ |
构建模块库(CPM / Create* / Install / PrintSummary 等 17 个 .cmake) |
|
custom-example/ |
fork 模板示例(每个想做 fork 的人都该看) |
|
deploy/ |
9 个平台的打包脚本 + 资源 |
|
docs/ |
文档 |
|
resources/ |
应用资源(图标 / 图片 / SVG / 字体引用等) |
|
src/ |
源代码主体,30 个子模块 |
|
test/ |
测试,16 个子模块 |
|
tools/ |
开发辅助脚本 |
|
translations/ |
翻译 |
Part 2:cmake/ 目录 —— 17 个 .cmake 是 QGC 构建系统的灵魂
cmake/ 目录里的文件按功能分 5 组。
2.1 Install / 打包脚本(11 个,占了一半)
这一组是 QGC "一次构建多平台打包"能力的实现。以前用 qmake 时这块全要手写 shell/Python,现在 CPack 接管了。
|
文件 |
作用 |
|
CreateAppImage.cmake |
Linux AppImage 打包 |
|
CreateCPackArchive.cmake |
通用 archive |
|
CreateCPackBundle.cmake |
macOS bundle |
|
CreateCPackCommon.cmake |
CPack 通用配置 |
|
CreateCPackDMG.cmake |
macOS DMG |
|
CreateCPackDeb.cmake |
Linux .deb |
|
CreateCPackIFW.cmake |
Qt Installer Framework |
|
CreateCPackNSIS.cmake |
Windows NSIS installer |
|
CreateCPackProductBuild.cmake |
macOS productbuild |
|
CreateCPackRPM.cmake |
Linux .rpm |
|
CreateMacDMG.cmake |
macOS DMG(macdeployqt 风) |
|
CreateQGCInstaller.cmake |
总入口,根据平台分发 |
|
CreateWinInstaller.cmake |
Windows installer(NSIS 风) |
2.2 构建工具脚本(5 个)
|
文件 |
作用 |
|
CustomOptions.cmake |
编译时的方向盘 —— 所有 QGC_* 选项定义(后面 Part 6 详讲) |
|
Git.cmake |
Git 集成,自动取版本号塞进 build 信息(About 里的 hash 就来自这里) |
|
Install.cmake |
安装规则集中地(install() 调用) |
|
PrintSummary.cmake |
配置后打印一个摘要(哪些 option 开了) |
|
SignMacBundle.cmake |
macOS 代码签名 |
2.3 cmake/modules/ —— 内嵌库(4 个)
|
文件 |
作用 |
|
CPM.cmake |
CPM 包管理器主体(自带,不需要额外装) |
|
get_cpm.cmake |
CPM 引导脚本 |
|
IWYU.cmake |
include-what-you-use(代码清洁度工具) |
|
vulkan.cmake |
Vulkan 配置(未启用,留代码) |
2.4 cmake/find-modules/ —— 找包(3 个)
|
文件 |
作用 |
|
FindGStreamer.cmake |
GStreamer 找包(支持 Android/iOS 自动下载) |
|
_FindGStreamer.cmake |
老版本归档 |
|
_FindGStreamerMobile.cmake |
老版本归档 |
2.5 cmake/presets/ —— 跨平台 preset(6 个 JSON)
|
文件 |
作用 |
|
common.json |
所有平台共享的 preset 基础 |
|
Android.json |
Android 平台 preset |
|
iOS.json |
iOS 平台 preset |
|
Linux.json |
Linux 平台 preset |
|
Windows.json |
Windows 平台 preset |
|
macOS.json |
macOS 平台 preset |
Part 3:src/ —— 30 个子模块怎么分组看
3.0 30 个模块的功能全景图

3.1 应用骨架(3 个)
|
目录 |
干嘛的 |
核心文件 |
|
src/ 顶层 |
程序入口 |
main.cc(开始)、QGCApplication.cc(QApplication 子类)、RunGuard.cc(防重启) |
|
API/ |
对外公开 API(主要给 fork 用) |
QGCCorePlugin.h |
|
Android/ |
Android 平台桥接 |
qtandroidserialport/ 等 |
3.2 通讯协议(2 个)
|
目录 |
干嘛的 |
|
Comms/ |
链路管理(Serial / TCP / UDP / Bluetooth / 模拟链路 MockLink / AirLink) |
|
MAVLink/ |
MAVLink 协议层,含 LibEvents/ 子目录(MAVLink Events 协议) |
3.3 飞行器抽象(5 个)
|
目录 |
干嘛的 |
|
Vehicle/ |
核心:Vehicle 类、多机管理。子目录 Actuators/ ComponentInformation/ FactGroups/ VehicleSetup/ |
|
FirmwarePlugin/ |
固件差异化:APM/ 和 PX4/ 两个 fork 实现 |
|
AutoPilotPlugins/ |
飞控配置 UI:APM/ / PX4/ / Common/ |
|
FactSystem/ |
参数/Fact 系统(QGC 的"参数总线")+ FactControls/ 子目录(QML 绑定控件) |
|
Settings/ |
应用设置(基于 FactSystem) |
3.4 任务规划(3 个)
|
目录 |
干嘛的 |
|
MissionManager/ |
航线/任务/Survey/GeoFence/Rally 全部模型层 |
|
PlanView/ |
Plan 视图(规划 UI) |
|
Terrain/ |
地形高度查询 |
3.5 UI / 视觉(8 个)
|
目录 |
干嘛的 |
|
UI/ |
主窗口、AppSettings 弹窗、Toolbar |
|
FlightDisplay/ |
Fly View(飞行视图)、Checklist、引导动作、虚拟摇杆 |
|
FlightMap/ |
飞行地图 |
|
QmlControls/ |
通用 QML 控件库(200+ 控件,全 fork 必看) |
|
QtLocationPlugin/ |
自家瓦片地图插件(Bing / Google / AMap / OSM 等) |
|
Viewer3D/ |
3D 视图(Qt3D 基础) |
|
FirstRunPromptDialogs/ |
首次启动向导 |
|
FollowMe/ |
"跟随我"功能 |
3.6 视频 / 相机(3 个)
|
目录 |
干嘛的 |
|
VideoManager/ |
视频系统总入口 + VideoReceiver/ 子目录(含 GStreamer / QtMultimedia 两种后端) |
|
Camera/ |
相机协议(Camera Protocol v2) |
|
Gimbal/ |
云台协议(Gimbal Protocol v2) |
3.7 外设 / 工具(4 个)
|
目录 |
干嘛的 |
|
Joystick/ |
手柄/游戏控制器(基于 SDL2) |
|
GPS/ |
外接 GPS / RTK 基站 |
|
ADSB/ |
ADSB 飞行器追踪(SBS / USB SDR) |
|
PositionManager/ |
地面站位置管理 |
3.8 杂项 / 工具(3 个)
|
目录 |
干嘛的 |
|
AnalyzeView/ |
Log 分析(GeoTagging / Log Download / MAVLink Console / Vibration / PX4 ULog) |
|
UTMSP/ |
UTM Service Provider(无人机交通管理) |
|
Utilities/ |
通用工具集:Audio/(TTS) / Compression/(zlib + xz) / Geo/(geographiclib) / Shape/(shapelib) |
Part 4:test/ —— 16 个测试模块,跟 src/ 对应
4.1 test/ 目录构成
|
子目录 / 文件 |
作用 |
|
ADSB/ |
ADSB 模块测试 |
|
AnalyzeView/ |
Log 分析测试 |
|
AutoPilotPlugins/ |
飞控配置 UI 测试 |
|
Camera/ |
相机协议测试 |
|
Comms/ |
链路管理测试 |
|
FactSystem/ |
参数系统测试 |
|
FollowMe/ |
跟随功能测试 |
|
GPS/ |
GPS / RTK 测试 |
|
MAVLink/ |
MAVLink 协议测试 |
|
MissionManager/ |
任务规划测试 |
|
QmlControls/ |
QML 控件测试 |
|
Terrain/ |
地形测试 |
|
UI/ |
主 UI 测试 |
|
Utilities/ |
工具类测试 |
|
Vehicle/ |
Vehicle 抽象测试 |
|
qgcunittest/ |
测试框架本体 |
|
CMakeLists.txt |
测试构建入口 |
|
UnitTest.qrc |
测试资源 |
|
UnitTestList.cc / .h |
测试用例注册表 |
4.2 测试是怎么编译/运行的
|
维度 |
行为 |
|
何时启用 |
QGC_BUILD_TESTING 由 CMAKE_BUILD_TYPE STREQUAL Debug 自动决定 —— Debug 默认 ON,Release 默认 OFF |
|
编译产物 |
测试代码直接编进主可执行,没有单独 test runner |
|
运行方式 |
QGroundControl --unittest XXX 跑某个 case |
|
QML 测试 |
部分 test 目录(如 test/FactSystem/)用 qt_add_qml_module,方便测 QML 控件 |
Part 5:deploy/ —— 9 个平台子目录,打 installer 的素材库
|
子目录 |
作用 |
备注 |
|
android/ |
Android 签名 / keystore 模板 |
配 APK/AAB 签名时用 |
|
docker/ |
Docker 构建镜像 |
CI 起点 |
|
installer/ |
Qt IFW installer 资源(图标 / banner) |
通用 |
|
ios/ |
iOS plist / 图标 / launch images |
App Store 上架素材 |
|
linux/ |
Linux desktop 文件 / AppImage 资源 |
桌面集成 |
|
macos/ |
macOS Info.plist / entitlements / 图标 |
沙箱权限 + 签名 |
|
multipass/ |
Multipass VM 配置 |
在 Mac 上交叉编 Linux 的虚拟机 |
|
vagrant/ |
Vagrant VM 配置 |
同上,另一个虚拟化路线 |
|
windows/ |
Windows NSIS 资源(图标 / banner / .rc) |
安装器素材 |
multipass/ 和 vagrant/ 这两个有点特殊 —— 它们让你 在 macOS 或 Windows 上用虚拟机交叉编 Linux。不是日常路径,但 CI 和"想编 Linux AppImage 但只有 Mac 的开发者"会用到。
docker/ 提供了完整的 Linux 编译镜像,如果你想在 GitHub Actions / GitLab CI 跑构建,这个目录是起点。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)