目录
前言
上篇,我们说了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)
}
总结
这篇文章注定要水了,只有一个类,而且目前还不知道这个类后语是如何使用的。在后边分析的过程中如果遇到了在体会吧。