机器人地面站-[QGroundControl源码解析]-[4]-[Airmap]

目录

前言

一.AirspaceManager

总结


前言

上篇,我们说了ADSB的源码,主要是负责进行ADSB设备的管理,消息的接收解析。

本篇我们按照顺序对Airmap文件夹下的代码进行分析。

 灰色的类在pro文件中没有引用,时间有限,这里先不过了,后边如果遇到了,再修改此篇文章。

一.AirspaceManager

这个类继承自QGCTool,被放入到QGCToolBox中管理,主要有提供者名称,天气信息,通告,规则,空域,飞行计划,空域可见性这几个属性。具体的看代码吧。

/****************************************************************************
 *
 * (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/

#pragma once

/**
 * @file AirspaceManager.h
 * Dummy file for when airspace management is disabled
 */

#include "QGCToolbox.h"
#include <QGeoCoordinate>

//-----------------------------------------------------------------------------
/**
 * @class AirspaceManager
 * Base class for airspace management. There is one (global) instantiation of this
 * 空域管理的基类。 这有一个(全局的)实例
 */
class AirspaceManager : public QGCTool {
    Q_OBJECT
public:
    AirspaceManager(QGCApplication* app, QGCToolbox* toolbox);
    virtual ~AirspaceManager() override;

    //定义属性
    Q_PROPERTY(QString                      providerName        READ providerName       CONSTANT)  //供应者名称
    Q_PROPERTY(QObject*                     weatherInfo         READ weatherInfo        CONSTANT)  //天气信息
    Q_PROPERTY(QObject*                     advisories          READ advisories         CONSTANT)  //通告
    Q_PROPERTY(QObject*                     ruleSets            READ ruleSets           CONSTANT)  //规则集
    Q_PROPERTY(QObject*                     airspaces           READ airspaces          CONSTANT)  //空域
    Q_PROPERTY(QObject*                     flightPlan          READ flightPlan         CONSTANT)  //飞行计划
    Q_PROPERTY(bool                         airspaceVisible     READ airspaceVisible    CONSTANT)  //空域可见性

    //允许这个函数被反射  西北点坐标 东南点坐标 飞行视图 重置
    Q_INVOKABLE void setROI                     (const QGeoCoordinate& pointNW, const QGeoCoordinate& pointSE, bool planView, bool reset = false);

    //属性对应的get方法
    QObject*                    weatherInfo    () { return &_dummy; }
    QObject*                    advisories     () { return &_dummy; }
    QObject*                    ruleSets       () { return &_dummy; }
    QObject*                    airspaces      () { return &_dummy; }
    QObject*                    flightPlan     () { return &_dummy; }

    //基类函数
    void setToolbox(QGCToolbox* toolbox) override;

    virtual QString             providerName    () const { return QString("None"); }

    virtual bool                airspaceVisible () { return false; }

signals:
    void                airspaceVisibleChanged  ();

private:
    QObject                     _dummy;
};
/****************************************************************************
 *
 * (c) 2009-2020 QGROUNDCONTROL PROJECT <http://www.qgroundcontrol.org>
 *
 * QGroundControl is licensed according to the terms in the file
 * COPYING.md in the root of the source code directory.
 *
 ****************************************************************************/


#include "AirspaceManager.h"
#include "QGCApplication.h"

AirspaceManager::AirspaceManager(QGCApplication* app, QGCToolbox* toolbox)
    : QGCTool(app, toolbox)
{
    //https://blog.csdn.net/cleverhorse/article/details/86494983
    //qmlRegisterUncreatableType()将c++类(派生自QObject)注册到QML系统(注册为非实例化类型)。但是我们不能在qml文件中为类创建对象,我们需要在qml文件中使用属性枚举方式来调用。
    qmlRegisterUncreatableType<AirspaceManager>             ("QGroundControl.Airspace",      1, 0, "AirspaceManager",                "Reference only");
}

AirspaceManager::~AirspaceManager()
{
}

void AirspaceManager::setToolbox(QGCToolbox* toolbox)
{
    QGCTool::setToolbox(toolbox);
}

void AirspaceManager::setROI(const QGeoCoordinate& pointNW, const QGeoCoordinate& pointSE, bool planView, bool reset)
{
    //Q_UNUSED()函数在程序中的作用,就如它所代表的英文一样,unused,即无用的意思。即Q_UNUSED()函数在程序中没有实质性的作用,用来避免编译器警告。
    Q_UNUSED(pointNW);
    Q_UNUSED(pointSE);
    Q_UNUSED(planView);
    Q_UNUSED(reset)
}

总结

这篇文章注定要水了,只有一个类,而且目前还不知道这个类后语是如何使用的。在后边分析的过程中如果遇到了在体会吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值