它能确保通信逻辑在后台永久运行,且能被 QGC 的任何组件通过单例访问。
为什么要用 QGCTool?随程序启动有什么好处?
在 QGC 的架构中,QGCTool 是一种特殊的单例模式。虽然不是必须 (你当然可以像之前说的那样在 QML 里直接 PayloadManager { ... }),但做成 QGCTool 有以下显著优势:
好处 A:生命周期管理(最重要的一点)
-
普通 QML 实例化 :如果你在
MissionView.qml里定义了PayloadManager,当你切换到SetupView或者AnalyzeView时,这个 QML 对象可能会被销毁。对象一销毁,你的 TCP 连接就断了! -
QGCTool 模式:它随 QGC 启动而创建,直到 QGC 完全退出才销毁。无论你在界面上怎么切来切去,后台连接始终稳定,1s 一次的数据解析永远在运行。
好处 B:全局"随处可见"
- 你可以直接在任何一个 QML 文件里写
QGroundControl.payloadManager.radarHeight,不需要在每个页面都写一遍import和实例化代码。
好处 C:符合 QGC 的插件化设计
- QGC 的核心开发者(Dronecode 团队)设计
QGCToolbox就是为了让各种硬件扩展(如视频流、ADSB、测距仪)解耦。
如何快速改造成 QGCTool?
第一步:修改 PayloadManager.h

第二步:在 QGCToolbox.h 注册 找到 QGCToolbox.h,添加:

第三步:在 QGCToolbox.cc 初始化 找到 QGCToolbox::QGCToolbox 构造函数:



总结:为什么要这样做?
-
稳定性:哪怕你从"飞行界面"切到了"设置界面",TCP 连接依然在后台运行,1s 一次的数据依然在被解析。如果你在 QML 里实例化,一切换页面连接就断了。
-
高性能 :
QGCTool由 C++ 管理,处理高频二进制数据(网口数据流)比在 QML 里处理快得多,不会造成 UI 卡顿。 -
单例模式 :整个 QGC 只有一个
PayloadManager。无论你在界面的哪个角落操作钩子,状态都是同步的。