添加了参数界面显示,尚未调通,需要检查信号和槽

This commit is contained in:
hm
2020-03-20 22:54:20 +08:00
parent cd4f252c6f
commit db54c9ffb4
10 changed files with 526 additions and 4 deletions
+1
View File
@@ -245,6 +245,7 @@ void MainWindow::onTabIndexChanged(const int &index)
*/
inspector->show();
}
}
+1 -4
View File
@@ -31,7 +31,7 @@ DEFINES += QT_DEPRECATED_WARNINGS
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
include (./ParameterInspector/ParameterInspector.pri)
DESTDIR = $$PWD/../thirdpart/lib
@@ -104,6 +104,3 @@ unix {
@@ -0,0 +1,319 @@
#include "ParameterInspector.h"
#include "ui_ParameterInspector.h"
ParameterInspector::ParameterInspector(QWidget *parent) :
QWidget(parent),
ui(new Ui::ParameterInspector)
{
ui->setupUi(this);
setWindowTitle(tr("ParameterInspector"));
parView = new QTreeView(this);
//parView->setEditTriggers(QTreeView::NoEditTriggers); //单元格不能编辑
parView->setSelectionBehavior(QTreeView::SelectRows); //一次选中整行
parView->setSelectionMode(QTreeView::SingleSelection); //单选,配合上面的整行就是一次选单行
parView->setAlternatingRowColors(true); //每间隔一行颜色不一样,当有qss时该属性无效
parView->setFocusPolicy(Qt::NoFocus);
//parView->setHeaderHidden(true);
//QHeaderView *mheader = new QHeaderView(Qt::Orientation,this);
//parView->setHeader(mheader);
parView->show();
}
ParameterInspector::~ParameterInspector()
{
delete model;
delete parView;
delete ui;
}
void ParameterInspector::resizeEvent(QResizeEvent * event)
{
//qDebug() << event;
Q_UNUSED(event);
parView->resize(this->size());
}
void ParameterInspector::appendParameter(mavlink_param_value_t item)
{
//qDebug() << "new parameter";
//查找是否已经存这一项,是那么就更新,如没有存在,那么就查index,如果index在中间就插入,在后面就连接
bool isFine = false;
QList<mavlink_param_value_t>::iterator li; //遍历
for ( li = list.begin(); li != list.end(); ++li )
{
if(li->param_index == item.param_index)//用ID还是用目录,这个需要斟酌
{
isFine = true;
qDebug() << "has found par:" << item.param_id;
list.replace(li->param_index,item);
}
}
if(isFine == false)
{
list.append(item);
qDebug() << "first time:" << item.param_id;
}
//if(list.last().param_index == (list.count() - 1))
//{
refreshView();
// }
}
void ParameterInspector::refreshView()
{
QString ParID = "";
int IDindex = 0;
QString ParType;
float ParValue;
if(model)
{
//qDebug() << "modle true";
//model->clear();
QList<mavlink_param_value_t>::iterator li; //遍历
for ( li = list.begin(); li != list.end(); ++li )
{
ParID.clear();
IDindex = 0;
while((li->param_id[IDindex] != '\0')&&(IDindex < 16))
{
ParID.append(li->param_id[IDindex]);
IDindex ++;
if(IDindex >= 16) break;
}
//qDebug() << ParID;
switch(li->param_type)
{
case MAV_PARAM_TYPE_UINT8:{
ParType = "UINT8";
//ParValue = ((uint8_t *)&li->param_value)[0];
model->setItem(li->param_index,
2,
new QStandardItem(QString::number(((uint8_t *)&li->param_value)[0])));
}break;
case MAV_PARAM_TYPE_INT8:{
ParType = "INT8";
//ParValue = ((int8_t *)&li->param_value)[0];
model->setItem(li->param_index,
2,
new QStandardItem(QString::number(((int8_t *)&li->param_value)[0])));
}break;
case MAV_PARAM_TYPE_UINT16:{
ParType = "UINT16";
//ParValue = ((uint16_t *)&li->param_value)[0];
model->setItem(li->param_index,
2,
new QStandardItem(QString::number(((uint16_t *)&li->param_value)[0])));
}break;
case MAV_PARAM_TYPE_INT16:{
ParType = "INT16";
//ParValue = ((int16_t *)&li->param_value)[0];
model->setItem(li->param_index,
2,
new QStandardItem(QString::number(((int16_t *)&li->param_value)[0])));
}break;
case MAV_PARAM_TYPE_UINT32:{
ParType = "UINT32";
//ParValue = ((uint32_t *)&li->param_value)[0];
//qDebug() << ((uint32_t *)&li->param_value)[0];
model->setItem(li->param_index,
2,
new QStandardItem(QString::number(((uint32_t *)&li->param_value)[0])));
}break;
case MAV_PARAM_TYPE_INT32:{
ParType = "INT32";
//ParValue = ((int32_t *)&li->param_value)[0];
model->setItem(li->param_index,
2,
new QStandardItem(QString::number(((int32_t *)&li->param_value)[0])));
}break;
case MAV_PARAM_TYPE_UINT64:{
ParType = "UINT64";
//ParValue = ((uint64_t *)&li->param_value)[0];
model->setItem(li->param_index,
2,
new QStandardItem(QString::number(((uint64_t *)&li->param_value)[0])));
}break;
case MAV_PARAM_TYPE_INT64:{
ParType = "INT64";
//ParValue = ((int64_t *)&li->param_value)[0];
model->setItem(li->param_index,
2,
new QStandardItem(QString::number(((int64_t *)&li->param_value)[0])));
}break;
case MAV_PARAM_TYPE_REAL32:{
ParType = "REAL32";
//ParValue = (float)li->param_value;
model->setItem(li->param_index,
2,
new QStandardItem(QString::number(((float *)&li->param_value)[0])));
}break;
case MAV_PARAM_TYPE_REAL64:{
ParType = "REAL64";
//ParValue = (double)li->param_value;
model->setItem(li->param_index,
2,
new QStandardItem(QString::number(((double *)&li->param_value)[0])));
}break;
case MAV_PARAM_TYPE_ENUM_END:{
ParType = "END";
}break;
}
model->setItem(li->param_index, 0, new QStandardItem(QString::number(li->param_index)));
model->setItem(li->param_index, 1, new QStandardItem(ParID));
//model->setItem(li->param_index, 2, new QStandardItem(QString::number(ParValue)));
model->setItem(li->param_index, 3, new QStandardItem(ParType));
}
//parView->setModel(model);
}
else
{
qDebug() << "model false";
model = new QStandardItemModel(4,4);
model->setHeaderData(0, Qt::Horizontal, tr("Index"));
model->setHeaderData(1, Qt::Horizontal, tr("Description"));
model->setHeaderData(2, Qt::Horizontal, tr("Value"));
model->setHeaderData(3, Qt::Horizontal, tr("Type"));
QList<mavlink_param_value_t>::iterator li; //遍历
for ( li = list.begin(); li != list.end(); ++li )
{
switch(li->param_type)
{
case MAV_PARAM_TYPE_UINT8: ParType = "UINT8";break; /* 8-bit unsigned integer | */
case MAV_PARAM_TYPE_INT8: ParType = "INT8";break; /* 8-bit signed integer | */
case MAV_PARAM_TYPE_UINT16:ParType = "UINT16";break; /* 16-bit unsigned integer | */
case MAV_PARAM_TYPE_INT16: ParType = "INT16";break; /* 16-bit signed integer | */
case MAV_PARAM_TYPE_UINT32:ParType = "UINT32";break; /* 32-bit unsigned integer | */
case MAV_PARAM_TYPE_INT32: ParType = "INT32";break; /* 32-bit signed integer | */
case MAV_PARAM_TYPE_UINT64:ParType = "UINT64";break; /* 64-bit unsigned integer | */
case MAV_PARAM_TYPE_INT64: ParType = "INT64";break; /* 64-bit signed integer | */
case MAV_PARAM_TYPE_REAL32:ParType = "REAL32";break; /* 32-bit floating-point | */
case MAV_PARAM_TYPE_REAL64:ParType = "REAL64";break; /* 64-bit floating-point | */
case MAV_PARAM_TYPE_ENUM_END:ParType = "END";break; /* | */
}
model->setItem(li->param_index, 0, new QStandardItem(ParType));
model->setItem(li->param_index, 1, new QStandardItem(QString::number(li->param_index)));
model->setItem(li->param_index, 2, new QStandardItem(ParID));
model->setItem(li->param_index, 3, new QStandardItem(QString::number(li->param_value)));
}
parView->setModel(model);
}
}
void ParameterInspector::addItem(void)//添加
{
}
void ParameterInspector::delItem(void)//删除
{
}
void ParameterInspector::insItem(void)//插入
{
}
QStandardItem *ParameterInspector::getItem(QStandardItemModel *model, QString s)
{
QStandardItem *getitem = nullptr;
if(!model->hasChildren())//判断是否有孩子,没有则返回0
return nullptr;
QList<QStandardItem*> list = model->findItems(s);
qDebug() << tr("list's lenght is %1").arg(list.length());
if(list.length() == 0)//如果链表长度为0,即没找到文本为s的条目
{
//将搜索子条目是否存在文本为s的条目
for(int i = 0;i < model->rowCount()&& getitem == nullptr;i++)//遍历model下的所有条目,如果getitem有获得对象,则退出循环
{
getitem = getItem(model->item(i),s);//寻找第i行条目下的子条目列中是否存在文本为s的条目。
}
}
else
{
return list.at(0);
}
return getitem;
}
QStandardItem *ParameterInspector::getItem(QStandardItem *item, QString s)
{
if(item == nullptr)
return nullptr;
qDebug() << tr("fine %1").arg(item->text());
QStandardItem *getitem = nullptr;
if(item->text().compare(s) == 0)
return item;
if(!item->hasChildren())//判断是否有孩子,没有则返回0
return nullptr;
for(int i = 0;i < item->rowCount() && getitem == nullptr;i++)//遍历item下所有子条目,若果getitme有获得对象,则退出循环
{
QStandardItem * childitem = item->child(i);
getitem = getItem(childitem,s);//寻找这个子条目的所有子条目是否存在文本为s的条目。
}
return getitem;
}
@@ -0,0 +1,133 @@
#ifndef PARAMETERINSPECTOR_H
#define PARAMETERINSPECTOR_H
#include <QWidget>
#include <QObject>
#include <QWidget>
#include "QPushButton"
#include "QTreeView"
#include "QDebug"
#include "QMap"
#include <QList>
#include "QStandardItemModel"
#include "mavlink.h"
#include "QHeaderView"
#ifdef QtMavlinkNode
#include <mavlinknodeglobal.h>
namespace Ui {
class ParameterInspector;
}
class MAVLINKNODESHARED_EXPORT ParameterInspector : public QWidget{
#else
namespace Ui {
class ParameterInspector;
}
class ParameterInspector : public QWidget
{
#endif
Q_OBJECT
public:
explicit ParameterInspector(QWidget *parent = nullptr);
~ParameterInspector();
void resizeEvent(QResizeEvent * event);
const QHash<int, QString> _mavlinkCompIdHash {
{ MAV_COMP_ID_CAMERA, "Camera1" },
{ MAV_COMP_ID_CAMERA2, "Camera2" },
{ MAV_COMP_ID_CAMERA3, "Camera3" },
{ MAV_COMP_ID_CAMERA4, "Camera4" },
{ MAV_COMP_ID_CAMERA5, "Camera5" },
{ MAV_COMP_ID_CAMERA6, "Camera6" },
{ MAV_COMP_ID_SERVO1, "Servo1" },
{ MAV_COMP_ID_SERVO2, "Servo2" },
{ MAV_COMP_ID_SERVO3, "Servo3" },
{ MAV_COMP_ID_SERVO4, "Servo4" },
{ MAV_COMP_ID_SERVO5, "Servo5" },
{ MAV_COMP_ID_SERVO6, "Servo6" },
{ MAV_COMP_ID_SERVO7, "Servo7" },
{ MAV_COMP_ID_SERVO8, "Servo8" },
{ MAV_COMP_ID_SERVO9, "Servo9" },
{ MAV_COMP_ID_SERVO10, "Servo10" },
{ MAV_COMP_ID_SERVO11, "Servo11" },
{ MAV_COMP_ID_SERVO12, "Servo12" },
{ MAV_COMP_ID_SERVO13, "Servo13" },
{ MAV_COMP_ID_SERVO14, "Servo14" },
{ MAV_COMP_ID_GIMBAL, "Gimbal1" },
{ MAV_COMP_ID_ADSB, "ADSB" },
{ MAV_COMP_ID_OSD, "OSD" },
{ MAV_COMP_ID_FLARM, "FLARM" },
{ MAV_COMP_ID_IMU, "IMU1" },
{ MAV_COMP_ID_IMU_2, "IMU2" },
{ MAV_COMP_ID_IMU_3, "IMU3" },
{ MAV_COMP_ID_GPS, "GPS1" },
{ MAV_COMP_ID_GPS2, "GPS2" }
};
typedef struct{
char name[16];
union{
double *d;
float *s;
uint32_t *I;
int32_t *i;
uint16_t *H;
int16_t *h;
uint8_t *B;
int8_t *b;
} val_ptr;
MAV_PARAM_TYPE typ;
} _param_props;
_param_props param_props;
void refreshView();
void addItem(void);
void delItem(void);
void insItem(void);
QStandardItem * getItem(QStandardItemModel *model, QString s);
QStandardItem * getItem(QStandardItem *item, QString s);
signals:
public slots:
void appendParameter(mavlink_param_value_t item);
private:
QTreeView *parView = nullptr;
QStandardItemModel *model = nullptr;
QList<mavlink_param_value_t> list;
QMap<QString,float> par_map;
Ui::ParameterInspector *ui;
};
#endif // PARAMETERINSPECTOR_H
@@ -0,0 +1,35 @@
#添加mavlink目录
INCLUDEPATH += $$PWD/../mavlink \
$$PWD/../mavlink/ardupilotmega \
$$PWD/../mavlink/common \
$$PWD/../mavlink/icarous \
$$PWD/../mavlink/uAvionix \
$$PWD/../mavlink/XYK \
$$PWD/../mavlink/message_definitions
HEADERS += \
ParameterInspector/ParameterInspector.h \
SOURCES += \
ParameterInspector/ParameterInspector.cpp \
FORMS += \
ParameterInspector/ParameterInspector.ui
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>ParameterInspector</class>
<widget class="QWidget" name="ParameterInspector">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>399</width>
<height>390</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
</widget>
<resources/>
<connections/>
</ui>
+3
View File
@@ -21,6 +21,9 @@ MavLinkNode::MavLinkNode(QObject *parent) : QObject(parent)
this,SIGNAL(SendMessageTo(quint8,quint8*,quint16)));
*/
}
MavLinkNode::~MavLinkNode()
+3
View File
@@ -10,6 +10,9 @@
#include "missionprocess.h"
#include "parameterprocess.h"
#ifdef QtMavlinkNode
#include <mavlinknodeglobal.h>
class MAVLINKNODESHARED_EXPORT MavLinkNode : public QObject {
+6
View File
@@ -3,6 +3,11 @@
ParameterProcess::ParameterProcess(QObject *parent) : QObject(parent)
{
setRunFrq(1000);
paramInspect = new ParameterInspector();
paramInspect->show();
}
void ParameterProcess::setRunFrq(uint32_t frq)
@@ -110,6 +115,7 @@ void ParameterProcess::ParameterParse(mavlink_message_t msg)
}break;
case MAVLINK_MSG_ID_PARAM_VALUE:{//
mavlink_msg_param_value_decode(&msg,&param_value);
paramInspect->appendParameter(param_value);
status.recieve.isWaitingforValue = false;
status.transmit.isWaitingforValue = false;
qDebug() << "param_value.param_index" << param_value.param_index;
+6
View File
@@ -8,6 +8,9 @@
#include "mavlink.h"
#include "QTimer"
#include "QTime"
#include "ParameterInspector/ParameterInspector.h"
#ifdef QtMavlinkNode
#include <mavlinknodeglobal.h>
class MAVLINKNODESHARED_EXPORT ParameterProcess : public QObject{
@@ -60,6 +63,9 @@ public:
_parameter_ status;
ParameterInspector *paramInspect;
//读取和写入指令
void ReadCmd(uint8_t m_sysid, uint8_t m_compid, uint8_t type);
void WriteCmd(uint8_t m_sysid, uint8_t m_compid ,uint32_t count );