修正清除参数会死机问题

This commit is contained in:
hm
2021-05-15 15:01:24 +08:00
parent b38e0abc8b
commit 41bde8d7c7
7 changed files with 82 additions and 42 deletions
@@ -247,6 +247,7 @@ void ParameterInspector::refreshView()//来一个参数更新一次
void ParameterInspector::clearview(void)
{
/*
QMap<int, QMap<int, QTreeWidgetItem*>>::iterator ite;
for (ite=uasParamTreeItems.begin(); ite!=uasParamTreeItems.end();++ite)
{
@@ -259,14 +260,18 @@ void ParameterInspector::clearview(void)
delete param_ite.take(*listKeys);
}
}
*/
uasParamTreeItems.clear();
/*
QMap<int, QTreeWidgetItem* >::iterator iteTree;
for(iteTree=uasTopLevelItems.begin(); iteTree!=uasTopLevelItems.end();++iteTree)
{
delete iteTree.value();
iteTree.value() = NULL;
}
*/
uasTopLevelItems.clear();
@@ -343,7 +348,6 @@ QVariant ParameterInspector::param_value(mavlink_param_value_t param)
default:
{
value = ((float *)&param.param_value)[0];
//qDebug() << "Unsupported type " << param.param_type;
}break;
}
+23 -20
View File
@@ -37,17 +37,18 @@ ToolsUI::ToolsUI(QWidget *parent) :
senser = new Senser();
remotecontrol = new RemoteControl();
install(index0, 0,QIcon(":/img/warning.png"),tr("Inspector"));
install(index1, 1,QIcon(":/img/warning.png"),tr("Log"));
install(index2, 2,QIcon(":/img/warning.png"),tr("Replay"));
install(index3, 3,QIcon(":/img/warning.png"),tr("Terminal"));
install(index4, 4,QIcon(":/img/warning.png"),tr("Servos"));
//install(powersystem, 5,QIcon(":/img/warning.png"),tr("PowerSystem"));
//install(servosystem, 6,QIcon(":/img/warning.png"),tr("ServoSystem"));
install(command, 7,QIcon(":/img/warning.png"),tr("CommandBox"));
//install(diagram, 8,QIcon(":/img/warning.png"),tr("Diagram"));
install(senser, 9,QIcon(":/img/warning.png"),tr("Senser"));
install(remotecontrol,10,QIcon(":/img/warning.png"),tr("RC"));
install(index0, 0,tr("Inspector"));
install(index1, 1,tr("Log"));
install(index2, 2,tr("Replay"));
install(index3, 3,tr("Terminal"));
install(index4, 4,tr("Servos"));
//install(powersystem, 5,tr("PowerSystem"));
//install(servosystem, 6,tr("ServoSystem"));
install(command, 7,tr("CommandBox"));
//install(diagram, 8,tr("Diagram"));
install(senser, 9,tr("Senser"));
install(senser, 9,tr("Senser"));
install(remotecontrol,9,tr("RC"));
@@ -106,12 +107,11 @@ void ToolsUI::setPushButtonState(QWidget *w,state s)
}
void ToolsUI::install(ToolsWidget *widget,int key, QIcon icon, QString name)
void ToolsUI::install(ToolsWidget *widget,int key, QString name)
{
if(!ToolsList.keys().contains(key))
//if(!ToolsList.keys().contains(ToolsList.size()))
if(!ToolsList.values().contains(widget))
{
//QWidget *widget = new QWidget(ui->frame);
int h = 50;
int w = 120;
@@ -119,20 +119,23 @@ void ToolsUI::install(ToolsWidget *widget,int key, QIcon icon, QString name)
btn->setText(name);
btn->setFixedSize(w,h);
btnList.insert(key,btn);
btnList.insert(ToolsList.size(),btn);
connect(btn,&QPushButton::clicked,
this,&ToolsUI::btnClicked);
ui->gridLayout_Indexs->addWidget(btn,key,1);
ui->gridLayout_Indexs->addWidget(btn,ToolsList.size(),1);
widget->setParent(ui->frame);
widget->setWindowTitle(name);
widget->setWindowIcon(icon);
widget->setIcon(widget->Icon());
widget->hide();
ToolsList.insert(key,widget);
ToolsList.insert(ToolsList.size(),widget);
}
else
{
qDebug() << "重复出现" << name;
}
}
void ToolsUI::btnClicked()
+1 -1
View File
@@ -61,7 +61,7 @@ public:
private slots:
void install(ToolsWidget *widget, int key, QIcon icon, QString name);
void install(ToolsWidget *widget, int key, QString name);
void setPushButtonState(QWidget *w,state s);
void onTabIndexChanged(const int &index);
+7 -1
View File
@@ -10,6 +10,12 @@ ToolsWidget::~ToolsWidget()
}
void ToolsWidget::mousePressEvent(QMouseEvent *event)
{
}
void ToolsWidget::setColor(QWidget *w,state s)
{
w->setProperty("state",s);
@@ -33,7 +39,7 @@ void ToolsWidget::setFloat(void)
this->setParent(nullptr);
this->resize(this->minimumSize());
this->move(pos.x() + (m_parent->width() - this->width()) * 0.5,
pos.y() + (m_parent->height() - this->height()) * 0.5);
pos.y());
if(Top())
{
+34
View File
@@ -15,6 +15,9 @@
#include "QScreen"
#include <QtGlobal>
#include "QIcon"
class ToolsWidget : public QWidget
{
Q_OBJECT
@@ -31,6 +34,9 @@ public:
~ToolsWidget();
signals:
@@ -50,18 +56,46 @@ public slots:
return isSetTop;
}
virtual void setIcon(QString path)
{
icon = QIcon(path);
setWindowIcon(icon);
}
virtual void setIcon(QIcon i)
{
icon = i;
setWindowIcon(icon);
}
virtual QIcon Icon(void)
{
return icon;
}
protected:
virtual void resizeEvent(QResizeEvent *event);
virtual void closeEvent(QCloseEvent *event);
virtual void mousePressEvent(QMouseEvent *event);
private slots:
private:
QWidget *m_parent;
bool isSetTop = false;
QIcon icon;
};
#endif // TOOLSWIDGET_H
+10 -15
View File
@@ -77,7 +77,6 @@ double findAngle(uint16_t pwm,QMap<uint16_t,double> table)
break;
}
}
}
return angle;
@@ -1059,20 +1058,20 @@ void MainWindow::update_servo_output_raw(mavlink_servo_output_raw_t servo)
if(servo.port == 0)
{
//12-16
statusui->setValue(2,0,QString::number(servo.servo12_raw,'f',0));//8000H~7FFFH -38°~38° 1LSB=38/32767
statusui->setValue(2,1,QString::number(servo.servo13_raw,'f',0));//88/32767
statusui->setValue(2,2,QString::number(servo.servo14_raw,'f',0));//直线舵机
statusui->setValue(2,3,QString::number(servo.servo15_raw,'f',0));
statusui->setValue(2,0,QString::number(((int16_t)servo.servo12_raw) * 38.0 / 32767.0,'f',2));//8000H~7FFFH -38°~38° 1LSB=38/32767
statusui->setValue(2,1,QString::number(((int16_t)servo.servo13_raw) * 88.0 / 32767.0,'f',2));//88/32767
statusui->setValue(2,2,QString::number(((int16_t)servo.servo14_raw) * 38.0 / 32767.0,'f',2));//直线舵机
statusui->setValue(2,3,QString::number(((int16_t)servo.servo15_raw) * 38.0 / 32767.0,'f',2));
statusui->setValue(2,4,QString::number(servo.servo16_raw,'f',0));
statusui->setValue(2,4,QString::number(((int16_t)servo.servo16_raw) * 38.0 / 32767.0,'f',2));
}
else if(servo.port == 1)
{
//17-19
statusui->setValue(2,5,QString::number(servo.servo1_raw,'f',0));
statusui->setValue(2,6,QString::number(servo.servo2_raw,'f',0));
statusui->setValue(2,7,QString::number(servo.servo3_raw,'f',0));
statusui->setValue(2,5,QString::number(((int16_t)servo.servo1_raw) * 88.0 / 32767.0,'f',2));
statusui->setValue(2,6,QString::number(((int16_t)servo.servo2_raw) * 38.0 / 32767.0,'f',2));
statusui->setValue(2,7,QString::number(((int16_t)servo.servo3_raw) * 38.0 / 32767.0,'f',2));
}
@@ -1093,13 +1092,13 @@ void MainWindow::updateUI()//事件驱动式更新数据
bool isCustomChanged = false;
bool isStateChanged = false;
static qint64 frq_time = QDateTime::currentMSecsSinceEpoch();//5hz
static qint64 frq_time = QDateTime::currentMSecsSinceEpoch();//10hz
if((QDateTime::currentMSecsSinceEpoch() - frq_time) <= 100)
{
return;
}
frq_time = QDateTime::currentMSecsSinceEpoch();
frq_time = QDateTime::currentMSecsSinceEpoch();
copk->setAttitude(dlink->mavlinknode->vehicleList.value(currentUAV).attitude.pitch * 57.3,
dlink->mavlinknode->vehicleList.value(currentUAV).attitude.roll * 57.3,
@@ -1127,10 +1126,6 @@ void MainWindow::updateUI()//事件驱动式更新数据
}
//dlink->mavlinknode->vehicleList.value(currentUAV).vfr_hud.airspeed //表速
//dlink->mavlinknode->vehicleList.value(currentUAV).gps_raw_int.vel//地速
copk->setAirSpeed(dlink->mavlinknode->vehicleList.value(currentUAV).emb_atom_com.Airspeed,5);//真空速
copk->setAirSpeedTarget(dlink->mavlinknode->vehicleList.value(currentUAV).emb_atom_com.Airspeed
+dlink->mavlinknode->vehicleList.value(currentUAV).nav_controller_output.aspd_error,5);
+2 -4
View File
@@ -210,7 +210,7 @@ void ParameterProcess::ReadStateMachine(void)//一整列
qDebug() << "start reading parameter";
status.recieve.isWaitingforValue = true;
request_list();//一整列,也可以一个,龚老师飞控并不支持这个
request_list();//一整列
step++;
time = QTime::currentTime().msecsSinceStartOfDay();
@@ -220,7 +220,6 @@ void ParameterProcess::ReadStateMachine(void)//一整列
//如果超时,那么结束
if((QTime::currentTime().msecsSinceStartOfDay() - time) > readTimeout)
{
//做一个列表,记录谁丢了,后面单独请求
//qmap list
@@ -641,7 +640,6 @@ QVariant ParameterProcess::set_type(mavlink_param_value_t param)
{
value = "unknow";
}break;
}
return value;
@@ -701,7 +699,7 @@ uint8_t ParameterProcess::get_type(QVariant type)
//使用QString
QString ParameterProcess::set_id(char *id)//设置id,如果id小于16,那么能够找到/0,如果等于或者大于,那么会找不到,因此乱码
QString ParameterProcess::set_id(char *id)
{
QString Name;