Fact System提供了一套用于创建QGC界面的简化标准容器(capabilities)。
每一个Fact都关联一个FactMetaData。它提供了Fact的具体信息,用于参数生成和验证。
FactControls是与Fact相关联的QML界面控件,根据FactMetaData提供的信息修改/显示Fact值。
原文到此结束了。
事件面板控制器与QML事件控制器结合处理事件,引入无人飞行系统界面类(UASInterface)、自动驾驶仪插件(AutoPilotPlugin)、车辆类(Vehicle),在初始化时间控制面板时,如果存在vehicle则激活它,否则让vehicle脱机并推迟检查事件面板,最后从QML正确设置。在头文件中定义了一个checkForMissingFactPanel(检查面板失踪事件)的槽,以及其他成员函数:
Fact被用于保存系统中的单个值,定义了许多属性设置,以及转换前后的各项参数。引入QGCMAVLink头文件。有三种初始化方式,一为默认初始化,二为传入参数初始化,三为拷贝初始化。
在类中添加以下属性:
通过validate函数认证以上属性。
定义几个新的信号:
该类包含许多判别获取各参数值或类型的函数,实现方法类似不一一列举。以及以下函数:
FactGroup用于将事件分组到hieraracy对象,创建QMap用于储存Fact、FactGroup、FactMetaData。定义updateAllValues槽(更新所有值),以及下列函数:
FactMetaData用于保存于事件相关的元数据,保存的元数据于Fact有关。这是保存在事件本身里的一个单独的对象,因为你可能有多个相同的实例事件。但是只会有一个元数据实例或各个事件。
在头文件中定义枚举数据类型和两种转换器,一种处理前的一种处理后的,用于将各类型转化为用户指定的相应类型。在转换指定的原始值时,对元数据进行验证,true则转换为正确的类型不验证元数据,false则说明转换失败传入的是错误的字符串。
并且建立一个应用程序设置的转换器结构体,用于保存两种转换器的相关参数。
主文件中,首先在所有事件对象中建立转换器,该转换器通过应用程序设置驱动。建立一个FactMetaData用于保存角速度陀螺仪的应从程序转换器的设置,并将各参数初始化为默认值。因大量函数实现方法类似,因此以下列出部分函数:
FactSystem组件是一个拥有单个值的Fact。FactMetaData保存了与Fact有关的额外的目标数据,比如简介,最大值,最小值,量程等等。FactValidator对象是一个QML验证器,根据FactMetaData验证输入设置。然后客户端代码可以使用此系统将Facts的集合显示为QML代码。举一个例子,这是PX4ParameterMetaData对象,它是PX4 AutoPilot插件的一部分。它暴露固件参数到QML,以便可以将QML ui元素直接绑定到参数。
FactSystem继承QGCTool类,重载了QGCTool的setToolbox函数,注册Fact FactMetaData FactPanelController FactGroup类型到数据库,然后使用QGCTool来启动app。
FactSystemTest的基类为[PX4 | Generic]的单元测试。继承了UnitTest。定义了一个插件接口。
几个测试函数也不是很懂。
继承了FactSystemTestBase类,将初始化与清空两个函数设置为槽。其余四个测试函数均调用FactSystemTestBase的成员函数。使用init(MAV_AUTOPILOT_GENERIC);来初始化泛用的微型无人机自动驾驶仪。
对PX4自动驾驶仪系统的FactSystem做单元测试。同样继承FactSystemTestBase,并调用其成员函数。通过init(MAV_AUTOPILOT_PX4);初始化PX4的微型无人机自动驾驶仪。
FactValidator继承了QValidator,并引入Fact类,事件验证器使用FactMetaData限制输入,包含读与写访问属性的成员函数,并从QValidator重载fixup与validate函数。定义一个用于验证器工作的Fact。
ParameterManager继承QObject类,连接参数管理器用于加载或更新事件。无人机的一系列事件设置均与其相关。引入以下头文件:
#include “ParameterManager.h”#include “QGCApplication.h”#include “QGCLoggingCategory.h”#include “QGCApplication.h”#include “UASMessageHandler.h”#include “FirmwarePlugin.h”#include “UAS.h”#include “JsonHelper.h”#include
以及一个成员函数:
继承Fact类,SettingsFact是拥有QSettings值的Fact。有两个成员变量,一个settingGroup设置组,一个visible是否可见。和一个槽,rawValueChanged(处理前值的改变)。在这个信号里,设置组为空的话,初始化一个新的设置组,并将值传入。初始化函数中,允许核心插件有一个覆盖默认值的机会,如果元数据存在,则显示。
QObject类 QObject是QT所有类的基类,QObject是Qt Object Model的核心。什么是Qt Object Model,主要包括如下的东西
QVariant类 QVariant储存了大量的数据类型, 包括 QBrush、 QColor、 QCursor、QDateTime、QFont、QKeySequence、QPalette、QPen、QPixmap、QPoint、QRect、QRegion、 QSize和 QString,并且还有C++基本类型,如int、float等。QVariant还能保存很多集合类型,QMap
因为是最后才做的这个问题总结,所以很多在看的过程中遇到的问题要么记不起来了要么通过查找资料解决了,所以就想起了这些。
整体详细的看了两遍,对这个系统有初步的认识,但是只能知道某个文件里面有些什么,没有一个具体的印象,比如这个类在程序里起到什么作用,这个FactSystem在程序中实现了什么功能,打开程序只能看到运行的界面,对于像FactSystem这样抽象的东西,无法跟程序之间建立联系,修改某一部分代码也看不到什么效果。有种拿着词典查单词看英语阅读的感觉,但是对整体文章的意思理解不了。
起初几乎要一个一个查单词才能看得懂那些函数的用途或者英文注释的意思,现在倒是可以逐渐看懂那些重复率比较高的参数或者名词。除了比较长比较复杂的函数,大体上也能看懂函数的实现过程,虽然叫我写肯定写不出来就是了。在考虑是不是需要通过一些小程序来熟悉一下Qt的应用,不然总有种很飘的感觉。
初次使用MarkDown写文档,可能有些不规范的地方,以后需要继续改进。