所有的热爱都要不遗余力,真正喜欢它便给它更高的优先级,和更多的时间吧!
关于QGC地面站其它文章请点击这里: QGC地面站
一. 前言
● BUG介绍:
在v4.0.4版本后,地面站源码在添加航点时,增加了防止用户误操作的功能。什么意思呢? 比如一开始 “航点” 的按钮是灰色的,只能在添加 “Takeoff” 后才可以添加航点,而且 “Takeoff” 按钮只能在 “Mission Start” 第一个点之后才会使能;同样 “Return” 也只能在最后一个航点才能添加。
这样还是灰常人性化滴,但是~ 如 gif 所示,在我正常操作添加后,“航点” 黄色高亮了,这时,我点击第一个航点 “Mission Start”,“航点” 按钮变为了灰色,但是点击地图照样还可以添加航点;同样在“Return To Launch” 后也依旧可以添加航点。接下来就看看是啥原因吧!
v4.0.11 QGC源码:“Mission Start” 点后失能还能添加
v4.0.11 QGC源码:“Return to Launch” 点后失能还能添加
解决之后:
“Mission Start” 第一个点不能再添加; “Return to Launch” 点后也不能再添加。
二. 程序
源码版本位v4.0.11,想要源码的可以看我的其它文章哦
我们直接来到 “Planview” 的 “Toolstrip”:
//PlanView.qml:576
ToolStrip {
id: toolStrip
...
model: [
...
{
name: _editingLayer == _layerRallyPoints ? qsTr("Rally Point") : qsTr("Waypoint"),
iconSource: "/qmlimages/MapAddMission.svg",
buttonEnabled: _isRallyLayer ? true : _missionController.flyThroughCommandsAllowed,
buttonVisible: _isRallyLayer || _isMissionLayer,
toggle: true,
checked: _addWaypointOnClick
},
...
]
function allAddClickBoolsOff() {
_addROIOnClick = false
_addWaypointOnClick = false
}
onClicked: {
switch (index) {
...
case waypointButtonIndex:
if (_addWaypointOnClick) {
allAddClickBoolsOff()
setChecked(index, false)
} else {
allAddClickBoolsOff()
_addWaypointOnClick = checked
}
break
...
}
“ToolStrip” 中的每一个按钮的否点击属性(“checked”)和使能属性(“buttonEnabled”), 都由 “Planview” 中的 “ToolStrip” 的 “model” 来决定的。而 “航点” 的 “checked” 由 “_addWaypointOnClick” 属性决定。 “buttonEnabled” 由 “_missionController.flyThroughCommandsAllowed” 来决定。 “flyThroughCommandsAllowed” 属性感兴趣的朋友可以仔细查看它的来龙去脉,这里就不啰嗦,反正就是各种限制条件。
当我们添加航点后, 点击了 “Mission Start” 第一个航点。这个时候 “flyThroughCommandsAllowed” 属性其实为真,是不予允许添加的,但是之前添加航点后使得 “_addWaypointOnClick” 为 真了,而 “_addWaypointOnClick” 决定了点击地图的时候是否添加航点,如下
//PlanView.qml:387
FlightMap {
id: editorMap
...
MouseArea {
anchors.fill: parent
onClicked: {
switch (_editingLayer) {
case _layerMission:
if (_addWaypointOnClick) {
insertSimpleItemAfterCurrent(coordinate)
}
...
}
所以关键是 “flyThroughCommandsAllowed” 更新了, 而 “_addWaypointOnClick” 没更新,所以增加个信号连接器,则问题迎刃而解:
//PlanView.qml 373 增加到 Planview.qml的根文件下
Connections {
target: _root._missionController
onFlyThroughCommandsAllowedChanged: {
if (_visualItems.count > 1 && _missionController.flyThroughCommandsAllowed === false) {
_root._addWaypointOnClick = false
}
}
}
关于QGC地面站其它文章请点击这里: QGC地面站