QT QGC添加自定义控件后白屏

在自定义QML界面导致程序显示白屏的问题中,作者详细记录了解决过程。问题出现在资源引用错误,最终通过调整qml文件位置并正确导入资源解决。

自己添加了一个qml,并加到主界面上。编译通过,但是显示的时候,出现白屏,其他的内容都不见了。

Log日志上有这个东西:

19-06-26 17:32:17.234 29497-29541/org.mavlink.qgroundcontrol W/QGroundControl: qrc:/qml/MainRootWindow.qml:261 Type FlightDisplayView unavailable
    qrc:/qml/QGroundControl/FlightDisplay/FlightDisplayView.qml:684 Type SGTrackToolBar unavailable
    qrc:/qml/QGroundControl/Controls/SGTrackToolBar.qml:-1 No such file or directory

 

将qml从qmldir里删除掉后运行,同样出现白屏。

Log日志:

2019-06-26 17:55:42.522 32372-32405/org.mavlink.qgroundcontrol W/QGroundControl: qrc:/qml/MainRootWindow.qml:261 Type FlightDisplayView unavailable
    qrc:/qml/QGroundControl/FlightDisplay/FlightDisplayView.qml:684 SGTrackToolBar is not a type

最终解决方法:

移动qml文件到/qml的根目录下,然后,将此qml添加到对应/qml资源的

按理说,这个资源是可以放置在任意的前缀下的,估计是import这个资源就好了,但是暂时没有时间试。

在 QGroundControl (QGC) 地面站中添加自定义的 MAVLink 命令(MAVCMD)任务,需要对 QGC 的源码进行修改,并在任务系统中集成新的命令。QGC 使用基于 QML 和 C++ 的架构,因此需要对这两个部分都有所了解。 ### 修改 MAVLink 命令定义 首先,需要在 MAVLink 的定义中添加自定义命令。MAVLink 命令通常定义在 `mavlink/include/mavlink/v2.0/common/mav_cmd.h` 文件中。你可以在此文件中添加新的命令定义,例如: ```c #define MAV_CMD_CUSTOM_MY_COMMAND 10000 ``` 确保该命令未被其他标准命令占用。添加后,需要重新编译 MAVLink 库以包含新的命令定义。 ### 修改 QGC 的任务系统 在 QGC 的源码中,任务系统主要位于 `src/MissionManager` 目录下。你可以找到 `MissionItem.h` 和 `MissionItem.cc` 文件,这些文件定义了任务项的基本结构和行为。 你需要在 `MissionItem.cc` 中添加对新命令的支持,例如: ```cpp case MAV_CMD_CUSTOM_MY_COMMAND: // 设置任务项的参数 _param1 = 1.0; _param2 = 2.0; _param3 = 3.0; _param4 = 4.0; break; ``` 此外,还需要在 `MissionController.cc` 中处理新命令的发送逻辑,确保它能够正确地通过 MAVLink 协议发送给飞行控制器。 ### 在 QML 界面中添加新任务 QGC 的任务编辑界面通常使用 QML 编写,位于 `QGroundControl/QmlControls/MissionEditor` 目录下。你需要在 `MissionEditor.qml` 或相关的 QML 文件中添加一个新的任务项,用户可以通过 UI 选择并配置该任务。 例如,可以在任务选择列表中添加一个新的条目: ```qml ComboBox { textRole: "display" valueRole: "value" model: ListModel { ListElement { display: "Custom Command"; value: MAV_CMD_CUSTOM_MY_COMMAND } } } ``` 同时,还需要为新任务项提供参数输入界面,用户可以设置 `_param1` 到 `_param4` 的值。 ### 编译与测试 完成上述修改后,重新编译 QGC 并运行。确保新任务能够在任务编辑器中显示,并且能够正确发送到飞行控制器。测试时应确保飞行控制器也支持该自定义命令,否则可能导致任务无法执行或出现错误。 ### 示例代码 以下是一个简单的示例,展示如何在 `MissionItem.cc` 中处理新命令: ```cpp void MissionItem::setCommand(int command) { switch (command) { case MAV_CMD_CUSTOM_MY_COMMAND: _param1 = 1.0; _param2 = 2.0; _param3 = 3.0; _param4 = 4.0; break; default: // 处理其他命令 break; } } ``` ### 相关问题 1. 如何在 QGroundControl 中调试自定义的任务项? 2. 如何确保自定义 MAVCMD 命令与飞行控制器兼容? 3. QGroundControl 的任务编辑器支持哪些类型的参数输入? 4. 如何在 QGC 中实现任务项的实时预览功能? 5. 如何将自定义任务保存到任务计划文件中? 通过以上步骤,可以在 QGC 地面站中成功添加自定义的 MAVCMD 任务,并扩展其功能以满足特定需求。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值