添加了参数界面显示,尚未调通,需要检查信号和槽
This commit is contained in:
@@ -245,6 +245,7 @@ void MainWindow::onTabIndexChanged(const int &index)
|
||||
*/
|
||||
|
||||
inspector->show();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
@@ -21,6 +21,9 @@ MavLinkNode::MavLinkNode(QObject *parent) : QObject(parent)
|
||||
this,SIGNAL(SendMessageTo(quint8,quint8*,quint16)));
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
MavLinkNode::~MavLinkNode()
|
||||
|
||||
@@ -10,6 +10,9 @@
|
||||
#include "missionprocess.h"
|
||||
#include "parameterprocess.h"
|
||||
|
||||
|
||||
|
||||
|
||||
#ifdef QtMavlinkNode
|
||||
#include <mavlinknodeglobal.h>
|
||||
class MAVLINKNODESHARED_EXPORT MavLinkNode : public QObject {
|
||||
|
||||
@@ -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,¶m_value);
|
||||
paramInspect->appendParameter(param_value);
|
||||
status.recieve.isWaitingforValue = false;
|
||||
status.transmit.isWaitingforValue = false;
|
||||
qDebug() << "param_value.param_index" << param_value.param_index;
|
||||
|
||||
@@ -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 );
|
||||
|
||||
Reference in New Issue
Block a user