QGC源码分析——航向规划中航点编辑流程(QGroundControl)

1. 流程分析

航向规划中航点编辑,就是下图中的红色框Waypoint的编辑,当然也包括其他特殊点编辑。它属于航线规划视图PlanView.qml中的内容
在这里插入图片描述

通过倒推分析,顺着问题找答案逻辑会更清晰。

通过关键词锁定文件位置
在这里插入图片描述
直接搜:“Travel to a position in 3D space” 发现在.json文件中,不直接。
继续搜:“Altitude relative to launch altitude” :
在这里插入图片描述
SimpleItemEditor.qml

简单分析 SimpleItemEditor.qml 文件发现和航点UI都能一一对应。
在这里插入图片描述
在这里插入图片描述

SimpleItemEditor

继续搜"SimpleItemEditor.qml"发现:

//SimpleMissionItem.cc
_editorQml = QStringLiteral("qrc:/qml/SimpleItemEditor.qml");
//TakeoffMissionItem.cc
_editorQml = QStringLiteral("qrc:/qml/SimpleItemEditor.qml");

再搜下 “_editorQml” 能发现不少“同类”

//测绘相关
//SurveyComplexItem.cc  
_editorQml = "qrc:/qml/SurveyItemEditor.qml";
//固定翼的复杂航点
//FixedWingLandingComplexItem.cc
_editorQml = "qrc:/qml/FWLandingPatternEditor.qml";
//第一个航点,也就是“Mission Start”,如下图
//MissionSettingsItem.cc
_editorQml = "qrc:/qml/MissionSettingsEditor.qml";

在这里插入图片描述
另通过Q_PROPERTY修饰后,editorQml 就可以在 QML 中访问,VisualMissionItem继承流程此处不做分析。

//VisualMissionItem.h
    Q_PROPERTY(QString   editorQml    MEMBER _editorQml   CONSTANT) ///< Qml code for editing this item

editorQml

扫描二维码关注公众号,回复: 12442129 查看本文章

editorQml在QML的调用:

//MissionItemEditor.qml
//在
    Loader {
    
    
        id:                 editorLoader
		...
        source:             missionItem.editorQml ///---[Mark]
        ...
    }

PlanView

MissionItemEditor 最终被PlanView.qml中调用,并作为 listView-model-delegate 模型中的 delegate

//PlanView.qml
//Mission Item Editor
Item {
    
    
    id:                     missionItemEditor
	...
    QGCListView {
    
    
        id:                 missionItemEditorListView
        ...
        model:              _missionController.visualItems
        //-- List Elements
        delegate: MissionItemEditor {
    
    
		...
    }
}

2. 流程总结

具体流程图如下:

QGCListView
PlanView.qml
MissionItemEditor.qml
missionItem.editorQml
SimpleItemEditor.qml
MissionSettingsEditor.qml
FWLandingPatternEditor.qml
SurveyItemEditor.qml
...

猜你喜欢

转载自blog.csdn.net/qq_16504163/article/details/107784961