QGC地面站二次开发(二)QGC 界面自定义和修改

目录

1、QGC 地面站的显示机制

1.1、C++类注册为 qml 可访问类型

1.2、注册属性或者方法

1.1.1、 属性声明

1.1.2、方法声明

2、QGC 地面站界面初步修改

3、QGC 地面站菜单和 LOGO 修改

3.1、地面站菜单

3.2、Logo 修改

3.2.1、 Windows Logo

3.2.2、 Linux Logo

4、QGC 地面站菜单功能裁剪

4.1、File 菜单

4.1.1、 日志回放

4.1.2、 退出​

4.2、Widget 菜单项

4.3、五大页面


1、QGC 地面站的显示机制

QGC 显示入口是 MainWindow Widget,加载了 MainWindowHybrid.qml,开始了整个 qml 文件调用系统, 再 MainWindowHybrid.qml 通过 Loader 器加载了 MainWindowInner.qml 在该文件系统中,该文件中完成了主页面的布局。 MainWindowInner.qml 中 MainToolBar 控件位于页面的顶部, 包含了5 大主页面的切换按钮,当鼠标点击时,对 onClicked 事件处理,通过Loader 来加载相应的 qml 文件,页面和 qml 文件的对应关系参看下图:QGC 地面站显示逻辑

QGC 将 QGroundControlQmlGlobal 类构造为单例,在 qml 声明 importQGroundControl 1.0 来引入相关的内容,之后通过 QGroundControl 来访问相应的属性和方法。

为方便大家的使用,在此我给大家介绍一下 Qt 中 C++属性和方法的定义方式。对于 C++中自定义的类如果想要在 qml 中被访问需要满足下面的条件:1. C++类继承自 QObject 或者 Qobject 的父类  2. 添加 Q_OBJECT 字段

1.1、C++类注册为 qml 可访问类型

我们可以通过下面的两种方式将 C++的类声明为 qml 中可以访问的类型:
1. qmlRegisterUncreatableType 声明的类型可以被 qml 通过属性方式访问,却无法qml 中直接构造。 使用示例如下:

qmlRegisterUncreatableType<MultiVehicleManager>("QGroundControl
.MultiVehicleManager", 1, 0, "MultiVehicleManager", "Reference
only");
QGroundControlQmlGlobal.h 中将 MultiVehicleManager 通过下面的语句
声明为它的属性:
Q_PROPERTY(MultiVehicleManager* multiVehicleManager READ
multiVehicleManager CONSTANT)
Qml 中课题通过 QGroundControl.multiVehicleManager 来访问其中的属
性和方法

2. qmlRegisterType 声明的 C++类型可以在 qml 文件中直接构造,在 qml 中通过 id来访问属性和方法。
 

qmlRegisterType<PlanMasterController>
("QGroundControl.Controllers", 1, 0, "PlanMasterController");
PlanView.qml 中:
PlanMasterController {
id: masterController
……}

1.2、注册属性或者方法

通过上面的方式我们将一个 C++类注册入 Qt 的元对象系统中 ,在 C++类中我们可以通过Q_PROPERTY 注册属性,同时可以通过在函数声明前添加Q_INVOKABLE 来声明 qml 可以调用的方法。

1.1.1、 属性声明

主要存在以下几种形式(示例取自 Vehicle 类,大家在实践过程中可以参考其中的实现进行):
1. Q_PROPERTY(int id READ idCONSTANT)当该属性的值一旦被赋值,在整个程序运行期间,在我们的 C++承租中不会修改该参数值时,我们采用这样的表达式。
2. Q_PROPERTY(QGeoCoordinate coordinate READ coordinate NOTIFY coordinateChanged)
当该属性只会在 C++中改变该属性的值的时候,我们会采用这样的表达式,当我们在 C++中改变该参数值时,发射 coordinateChanged 信号, 来通知 qml 相关的属性有更改 i 进

<think>嗯,用户让我介绍QGC地面站二次开发,我得先搞清楚QGC是什么。QGC应该是QGroundControl的缩写,对吧?这是无人机的地面控制站软件,主要用于无人机的地面操作监控。用户可能对无人机或者相关开发感兴趣,想自己定制功能或者扩展应用。 首先,我需要确认QGC的基本信息,比如它是开源的,基于Qt框架开发的,支持跨平台。这点很重要,因为二次开发通常需要了解其使用的技术框架。然后,二次开发的主要方向可能包括界面定制、功能扩展、协议支持、硬件适配自动化任务。这些都是用户可能需要的方面。 接下来,我需要考虑用户可能的背景。他们可能是开发者,或者有一定技术背景的无人机爱好者。所以需要介绍开发环境,比如Qt Creator,编程语言是C++,可能还需要了解QMLJavaScript。对于不熟悉这些技术的用户,可能需要先学习相关知识。 另外,用户可能想知道二次开发的具体步骤,比如获取源码、搭建环境、修改代码、编译测试。这里要详细说明,但也要简洁,避免过于技术化。同时,应用场景比如科研、行业定制、教育培训,这些能帮助用户理解二次开发的用途。 可能还需要提到注意事项,比如遵守开源协议,代码兼容性,文档社区资源的重要性。这些都是开发过程中容易遇到的问题,提前说明可以帮助用户避免一些麻烦。 最后,总结一下二次开发的意义,强调其灵活性实用性,鼓励用户根据需求进行定制。同时,提供资源链接,比如GitHub仓库官方文档,方便用户进一步探索。 需要确保语言口语化,避免专业术语堆砌,但也要准确。结构要清晰,分点说明,让用户容易理解。可能用户需要的是入门级的指导,所以不宜太深入技术细节,但要点到位。</think>QGC(QGroundControl)地面站是一款开源的无人机(UAV)地面控制软件,主要用于无人机任务规划、飞行监控、参数调整数据通信等。其二次开发指基于QGC源码进行定制化修改或功能扩展,以满足特定需求或适配不同硬件平台。以下是二次开发的关键点介绍: -- ### **1. 二次开发方向** - **界面定制**:调整UI布局、语言本地化(如中文支持)或优化交互逻辑。 - **功能扩展**:新增插件(如气象数据接入、AI算法集成)或增强任务规划能力(复杂航点、避障策略)。 - **协议适配**:支持自定义通信协议(如非标MAVLink消息)或兼容特殊硬件设备(传感器、遥控器)。 - **自动化集成**:与外部系统(ROS、云端平台)对接,实现自动起降、集群控制等。 --- ### **2. 开发基础** - **技术栈**:基于C++/Qt框架(核心逻辑)QML/JavaScript(前端界面)。 - **源码获取**:通过GitHub克隆官方仓库([QGC GitHub](https://github.com/mavlink/qgroundcontrol))。 - **环境搭建**:需安装Qt Creator、对应版本的Qt库及编译工具链(如CMake)。 --- ### **3. 开发步骤** 1. **熟悉源码结构**: 核心模块包括`Vehicle`(无人机对象)、`FlightMap`(地图组件)、`MissionManager`(任务管理)。 2. **功能修改/新增**: 通过继承现有类或编写插件(Plugin)实现功能扩展。 3. **编译调试**: 使用Qt Creator编译跨平台版本(Windows/Linux/macOS/Android/iOS)。 4. **测试验证**: 连接无人机或模拟器(如Gazebo、JMavSim)进行功能验证。 --- ### **4. 典型应用场景** - **科研领域**:集成SLAM、视觉导航等算法。 - **行业定制**:农业植保、物流运输等垂直领域的功能优化。 - **教育培训**:简化操作界面或添加教学辅助模块。 --- ### **5. 注意事项** - **开源协议**:遵守LGPL协议,修改后若分发需开源相关代码。 - **版本兼容性**:注意QGC与飞控固件(如PX4、ArduPilot)的版本匹配。 - **社区资源**:利用官方文档、开发者论坛MAVLink生态工具加速开发。 --- ### **6. 学习资源** - 官方文档:[QGC Developer Guide](https://dev.qgroundcontrol.com/master/en/) - 示例代码:Git仓库中的`CustomWidget`示例插件。 - 社区支持:PX4 Slack频道、Gitter开发者群组。 --- 通过二次开发,可快速将QGC适配到特定场景(如巡检无人机、测绘系统),显著降低自研地面站的成本。若需深入开发,建议从阅读源码调试现有插件入手。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chris_Brown

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值