420 lines
16 KiB
C++
420 lines
16 KiB
C++
#include "StatusUI.h"
|
|
#include "ui_StatusUI.h"
|
|
|
|
StatusUI::StatusUI(QWidget *parent) :
|
|
QWidget(parent),
|
|
ui(new Ui::StatusUI)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
//load qss
|
|
QFile file(":/qss/StatusUI.qss");
|
|
file.open(QFile::ReadOnly);
|
|
QTextStream filetext(&file);
|
|
QString stylesheet = filetext.readAll();
|
|
this->setStyleSheet(stylesheet);
|
|
file.close();
|
|
|
|
int id_count = 0;
|
|
|
|
StateGroup *base = new StateGroup(id_count++,this);
|
|
StateGroup *actuator = new StateGroup(id_count++,this);
|
|
StateGroup *state = new StateGroup(id_count++,this);
|
|
|
|
|
|
|
|
|
|
//install(mode,0,"飞行模式",0,QMap<QVariant, StateWidget::state>{{"待机",StateWidget::state::gray},{"手动",StateWidget::state::orange},{"自主",StateWidget::state::green}});
|
|
|
|
install(base,0,"攻角[°]",0,QMap<QVariant, StateWidget::state>{{-20,StateWidget::state::red},{20,StateWidget::state::green}});
|
|
install(base,0,"侧滑角[°]",0,QMap<QVariant, StateWidget::state>{{-20,StateWidget::state::red},{20,StateWidget::state::green}});
|
|
install(base,0,"滚转角[°]",0,QMap<QVariant, StateWidget::state>{{-45,StateWidget::state::red},{45,StateWidget::state::green}});
|
|
install(base,0,"俯仰角[°]",0,QMap<QVariant, StateWidget::state>{{-20,StateWidget::state::red},{20,StateWidget::state::green}});
|
|
install(base,0,"航迹角[°]",0,QMap<QVariant, StateWidget::state>{{-1.0,StateWidget::state::red},{361,StateWidget::state::green}});
|
|
install(base,0,"海拔[m]",0,QMap<QVariant, StateWidget::state>{{1500,StateWidget::state::red},{999000,StateWidget::state::green}});
|
|
install(base,0,"表速[m/s]",0,QMap<QVariant, StateWidget::state>{{100,StateWidget::state::red},{700,StateWidget::state::green}});
|
|
install(base,0,"真空速[m/s]",0,QMap<QVariant, StateWidget::state>{{100,StateWidget::state::red},{700,StateWidget::state::green}});
|
|
install(base,0,"地速[m/s]",0,QMap<QVariant, StateWidget::state>{{100,StateWidget::state::red},{700,StateWidget::state::green}});
|
|
install(base,0,"马赫数[Ma]",0,QMap<QVariant, StateWidget::state>{{0.3,StateWidget::state::red},{0.8,StateWidget::state::green},{2,StateWidget::state::orange}});
|
|
//install(base,0,"爬升率[m/s]",0,QMap<QVariant, StateWidget::state>{{-80,StateWidget::state::red},{100,StateWidget::state::green},{500,StateWidget::state::orange}});
|
|
|
|
install(base,0,"导航模式",0,
|
|
QMap<QVariant, StateWidget::state>{{"未初始化",StateWidget::state::gray},
|
|
{"INS/大气",StateWidget::state::orange},
|
|
{"INS/DGPS",StateWidget::state::green},
|
|
{"INS/GNSS",StateWidget::state::green},
|
|
{"GNSS",StateWidget::state::orange},
|
|
{"未知参数",StateWidget::state::red}});
|
|
|
|
install(base,0,"双天线定向",0);
|
|
|
|
|
|
install(actuator,0,"左副翼[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
|
|
install(actuator,0,"右副翼[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
|
|
install(actuator,0,"左升降[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
|
|
install(actuator,0,"右升降[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
|
|
install(actuator,0,"左方向[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
|
|
install(actuator,0,"右方向[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
|
|
install(actuator,0,"左扰流[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
|
|
install(actuator,0,"右扰流[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
|
|
install(actuator,0,"左变体[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
|
|
install(actuator,0,"右变体[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
|
|
install(actuator,0,"转向[°]",0,QMap<QVariant, StateWidget::state>{{2,StateWidget::state::red}});
|
|
//左副翼,右副翼,左升降,右升降,左方向,右方向,左扰流,右扰流,左变体,右变体
|
|
|
|
//install(e_fly,0,"位置状态",0,QMap<QVariant, StateWidget::state>{{"无效",StateWidget::state::red},{"有效",StateWidget::state::green}});
|
|
//install(e_fly,0,"高度状态",0);
|
|
//install(e_fly,0,"加速度状态",0);
|
|
//install(e_fly,0,"姿态状态",0,QMap<QVariant, StateWidget::state>{{"无效",StateWidget::state::red},{"有效",StateWidget::state::green}});
|
|
//install(e_fly,0,"角速度状态",0);
|
|
//install(e_fly,0,"时间状态",0);
|
|
//install(e_fly,0,"航迹角",0);
|
|
//install(e_fly,0,"天向加速度",0);
|
|
|
|
|
|
//install(e_fly,0,"偏航加速度",0);
|
|
/*install(e_fly,0,"工作状态",0,
|
|
QMap<QVariant, StateWidget::state>{{"准备",StateWidget::state::gray},
|
|
{"对准中",StateWidget::state::orange},
|
|
{"导航",StateWidget::state::green},
|
|
{"对准失败",StateWidget::state::red},
|
|
{"未知参数",StateWidget::state::red}});
|
|
*/
|
|
|
|
|
|
|
|
//install(e_fly,0,"主惯导",0);
|
|
//install(e_fly,0,"IMU状态",0);
|
|
//install(e_fly,0,"DGPS状态",0);
|
|
|
|
install(state,0,"油门[%]",0,
|
|
QMap<QVariant, StateWidget::state>{{0,StateWidget::state::red},
|
|
{5,StateWidget::state::orange},
|
|
{200,StateWidget::state::green}});
|
|
|
|
install(state,2,"转速[r/min]",0,
|
|
QMap<QVariant, StateWidget::state>{{18000,StateWidget::state::red},
|
|
{20000,StateWidget::state::orange},
|
|
{50000,StateWidget::state::green}});
|
|
install(state,2,"进气总温[℃]",0,
|
|
QMap<QVariant, StateWidget::state>{{-60,StateWidget::state::orange},
|
|
{90,StateWidget::state::green}});
|
|
install(state,2,"P2[MPa]",0,
|
|
QMap<QVariant, StateWidget::state>{{0,StateWidget::state::red},
|
|
{0.1,StateWidget::state::orange},
|
|
{6,StateWidget::state::green}});
|
|
install(state,2,"伺服电流[mA]",0,
|
|
QMap<QVariant, StateWidget::state>{{0,StateWidget::state::red},
|
|
{10,StateWidget::state::orange},
|
|
{150,StateWidget::state::green}});
|
|
|
|
//install(state,2,"发动机状态",0);
|
|
//install(state,2,"发动机作动",0);
|
|
|
|
|
|
install(state,0,"涡轮后温度[℃]",0,
|
|
QMap<QVariant, StateWidget::state>{{100,StateWidget::state::gray},
|
|
{400,StateWidget::state::orange},
|
|
{800,StateWidget::state::green},
|
|
{850,StateWidget::state::orange},
|
|
{10000,StateWidget::state::red}});
|
|
install(state,0,"滑油压力[MPa]",0,
|
|
QMap<QVariant, StateWidget::state>{{0.1,StateWidget::state::red},
|
|
{0.2,StateWidget::state::orange},
|
|
{100,StateWidget::state::green}});
|
|
install(state,0,"燃油流量[kg/m]",0,
|
|
QMap<QVariant, StateWidget::state>{{0.2,StateWidget::state::red},
|
|
{0.4,StateWidget::state::orange},
|
|
{100,StateWidget::state::green}});
|
|
|
|
install(state,0,"剩余油量[kg]",0,
|
|
QMap<QVariant, StateWidget::state>{{20,StateWidget::state::red},
|
|
{40,StateWidget::state::orange},
|
|
{800,StateWidget::state::green}});
|
|
|
|
|
|
/*
|
|
install(state,2,"投放状态",0,
|
|
QMap<QVariant, StateWidget::state>{{"锁定|锁定",StateWidget::state::green},
|
|
{"锁定|投放",StateWidget::state::orange},
|
|
{"投放|锁定",StateWidget::state::orange},
|
|
{"投放|投放",StateWidget::state::red}});
|
|
//install(state,0,"脱离状态2",0);
|
|
install(state,2,"火箭状态",0,
|
|
QMap<QVariant, StateWidget::state>{{"保险|工作",StateWidget::state::orange},
|
|
{"保险|上锁",StateWidget::state::green},
|
|
{"解除|工作",StateWidget::state::red},
|
|
{"解除|上锁",StateWidget::state::orange}});
|
|
install(state,0,"加速度采集",0);
|
|
install(state,0,"点火状态",0,
|
|
QMap<QVariant, StateWidget::state>{{"未点火",StateWidget::state::gray},
|
|
{"点火成功",StateWidget::state::green}});
|
|
|
|
*/
|
|
|
|
|
|
/*
|
|
install(battery,0,"飞控电压[V]",0,
|
|
QMap<QVariant, StateWidget::state>{{23,StateWidget::state::red},
|
|
{24,StateWidget::state::orange},
|
|
{50,StateWidget::state::green}});
|
|
install(battery,0,"舵机电压[V]",0,
|
|
QMap<QVariant, StateWidget::state>{{46,StateWidget::state::red},
|
|
{48,StateWidget::state::orange},
|
|
{80,StateWidget::state::green}});
|
|
|
|
install(communication,0,"信号[%]",0,
|
|
QMap<QVariant, StateWidget::state>{{50,StateWidget::state::red},
|
|
{80,StateWidget::state::orange},
|
|
{100,StateWidget::state::green}});
|
|
install(communication,0,"接收[B/s]",0,
|
|
QMap<QVariant, StateWidget::state>{{500,StateWidget::state::red},
|
|
{800,StateWidget::state::orange},
|
|
{3000,StateWidget::state::green}});
|
|
install(communication,0,"发送[B/s]",0,
|
|
QMap<QVariant, StateWidget::state>{{5,StateWidget::state::red},
|
|
{100,StateWidget::state::orange},
|
|
{3000,StateWidget::state::green}});
|
|
|
|
|
|
*/
|
|
|
|
//GroupList.insert(mode->ID(),mode);
|
|
GroupList.insert(base->ID(),base);
|
|
GroupList.insert(actuator->ID(),actuator);
|
|
//GroupList.insert(e_fly->ID(),e_fly);
|
|
GroupList.insert(state->ID(),state);
|
|
//GroupList.insert(battery->ID(),battery);
|
|
//GroupList.insert(communication->ID(),communication);
|
|
|
|
if(GroupList.size() > 0)
|
|
{
|
|
for( QMap<int,StateGroup *>::iterator i = GroupList.begin();i != GroupList.end();i++)
|
|
{
|
|
StateGroup *g = i.value();
|
|
ui->gridLayout->addWidget(g,g->ID(),0,1,1);
|
|
}
|
|
|
|
|
|
QVBoxLayout * vb = new QVBoxLayout;
|
|
vb->addStretch();
|
|
ui->gridLayout->addLayout(vb,GroupList.size(),0,1,1);
|
|
}
|
|
else
|
|
{
|
|
this->setFixedWidth(0);
|
|
}
|
|
|
|
|
|
basewidth = this->width();
|
|
|
|
|
|
}
|
|
|
|
StatusUI::~StatusUI()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
void StatusUI::resizeEvent(QResizeEvent *event)
|
|
{
|
|
//qDebug() << event;
|
|
|
|
//计算一个使用多少长度
|
|
|
|
/*
|
|
if(GroupList.size() > 0)
|
|
{
|
|
int row = 0;
|
|
int column = 0;
|
|
|
|
int current_height = 0;
|
|
|
|
this->resize(basewidth,this->height());
|
|
|
|
for( QMap<int,StateGroup *>::iterator i = GroupList.begin();i != GroupList.end();i++)
|
|
{
|
|
StateGroup *g = i.value();
|
|
//
|
|
|
|
qDebug() << g->size() << g->lenght();
|
|
|
|
|
|
if((current_height + g->lenght()) < this->height())
|
|
{
|
|
ui->gridLayout->addWidget(g,row,column,1,1);
|
|
|
|
row++;
|
|
|
|
current_height += g->lenght();
|
|
}
|
|
else
|
|
{
|
|
current_height = 0;
|
|
column ++;
|
|
row = 0;
|
|
this->resize(this->width() * (column+1),this->height());
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
*/
|
|
|
|
}
|
|
|
|
void StatusUI::setColor(int group,int index,StateWidget::state s)
|
|
{
|
|
if(GroupList.contains(group))
|
|
{
|
|
StateGroup *g = GroupList.value(group);
|
|
|
|
if(g)
|
|
{
|
|
g->setColor(index,s);
|
|
}
|
|
}
|
|
}
|
|
|
|
void StatusUI::setValue(int group, int index, QString s)
|
|
{
|
|
if(GroupList.contains(group))
|
|
{
|
|
StateGroup *g = GroupList.value(group);
|
|
|
|
if(g)
|
|
{
|
|
g->setValue(index,s);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
bool StatusUI::addGroup(int index)
|
|
{
|
|
bool flag = false;
|
|
|
|
StateGroup *group = GroupList.value(index);
|
|
|
|
if(GroupList.contains(index))
|
|
{
|
|
group = GroupList.value(index);
|
|
}
|
|
else
|
|
{
|
|
group = new StateGroup(GroupList.size(),this);
|
|
GroupList.insert(index,group);
|
|
|
|
flag = true;
|
|
}
|
|
|
|
return flag;
|
|
}
|
|
|
|
StateWidget * StatusUI::install(StateGroup *group,int flag, QString name, QVariant value,QMap<QVariant,StateWidget::state> stats)
|
|
{
|
|
StateWidget *w = new StateWidget(flag,name,value,StateWidget::state::gray,group->count());
|
|
|
|
w->setStats(stats);
|
|
|
|
group->addItem(w);
|
|
|
|
return w;
|
|
}
|
|
|
|
StateWidget *StatusUI::install(StateGroup *group,int flag, QString name, QVariant value)
|
|
{
|
|
StateWidget *w = new StateWidget(flag,name,value,StateWidget::state::gray,group->count());
|
|
|
|
group->addItem(w);
|
|
|
|
return w;
|
|
}
|
|
|
|
|
|
StateWidget * StatusUI::install(int index,int flag, QString name, QVariant value)
|
|
{
|
|
StateGroup *group = GroupList.value(index);
|
|
|
|
if(GroupList.contains(index))
|
|
{
|
|
group = GroupList.value(index);
|
|
}
|
|
else
|
|
{
|
|
group = new StateGroup(GroupList.size(),this);
|
|
GroupList.insert(GroupList.size(),group);
|
|
}
|
|
|
|
|
|
StateWidget *w = new StateWidget(flag,name,value,StateWidget::state::gray,group->count());
|
|
|
|
group->addItem(w);
|
|
|
|
return w;
|
|
}
|
|
|
|
|
|
void StatusUI::setInital(void)
|
|
{
|
|
foreach (StateGroup *group, GroupList) {
|
|
|
|
QMap<int,StateWidget *> list = group->Items();
|
|
|
|
foreach (StateWidget *w, list) {
|
|
if(w)
|
|
{
|
|
w->setColor(StateWidget::gray);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void StatusUI::setFailure(void)
|
|
{
|
|
foreach (StateGroup *group, GroupList) {
|
|
|
|
QMap<int,StateWidget *> list = group->Items();
|
|
|
|
foreach (StateWidget *w, list) {
|
|
if(w)
|
|
{
|
|
w->setColor(StateWidget::red);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void StatusUI::setSuccess(void)
|
|
{
|
|
foreach (StateGroup *group, GroupList) {
|
|
|
|
QMap<int,StateWidget *> list = group->Items();
|
|
|
|
foreach (StateWidget *w, list) {
|
|
if(w)
|
|
{
|
|
w->setColor(StateWidget::green);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void StatusUI::setWarning(void)
|
|
{
|
|
foreach (StateGroup *group, GroupList) {
|
|
|
|
QMap<int,StateWidget *> list = group->Items();
|
|
|
|
foreach (StateWidget *w, list) {
|
|
if(w)
|
|
{
|
|
w->setColor(StateWidget::orange);
|
|
}
|
|
}
|
|
}
|
|
}
|