Files
gcs-nf/App/HealthUI/HealthUI.cpp
T
2022-08-24 11:51:28 +08:00

249 lines
5.5 KiB
C++

#include "HealthUI.h"
#include "ui_HealthUI.h"
HealthUI::HealthUI(QWidget *parent) :
QWidget(parent),
ui(new Ui::HealthUI)
{
ui->setupUi(this);
//load qss
QFile file(":/qss/HealthUI.qss");
file.open(QFile::ReadOnly);
QTextStream filetext(&file);
QString stylesheet = filetext.readAll();
this->setStyleSheet(stylesheet);
file.close();
quint16 index = 1;
Install("320B",index++,state::inital);
Install("SBG",index++,state::inital);
Install("大气机",index++,state::inital);
Install("起落架",index++,state::inital);
Install("配电盒",index++,state::inital);//5
Install("记录仪",index++,state::inital);//
Install("发动机",index++,state::inital);
Install("舵控1",index++,state::inital);
Install("舵控2",index++,state::inital);//3
Install("舵控3",index++,state::inital);//10
Install("开始记录",index++,state::inital);//12
Install("发动机射检",index++,state::inital);//11
Install("舵控1自检",index++,state::inital);
Install("舵控2自检",index++,state::inital);
Install("舵控3自检",index++,state::inital);//15
Install("使用320",index++,state::inital);//使用SBG
Install("空速管加温",index++,state::inital);//
Install("插销上锁",index++,state::inital);//
Install("变体上锁",index++,state::inital);//20
Install("56V并网",index++,state::inital);//
Install("燃油泵",index++,state::inital);
Install("燃油切断阀",index++,state::inital);
Install("温度变送器",index++,state::inital);
Install("开伞",index++,state::inital);
Install("切伞",index++,state::inital);//25
Install("蓄电池加温",index++,state::inital);
Install("刹车/收放",index++,state::inital);
Install("滑油变送器",index++,state::inital);
Install("起落架放",index++,state::inital);
Install("舱门打开",index++,state::inital);//30 3个通道都加温才变绿
Install("副翼/方向",index++,state::inital);
Install("转向/变体锁",index++,state::inital);
Install("电源状态",index++,state::inital);//
Install("起落架承载",index++,state::inital);//
Install("刹车开启",index++,state::inital);
//通过json安装
}
HealthUI::~HealthUI()
{
delete ui;
}
void HealthUI::setState(QWidget *w,state s)
{
w->setProperty("state",s);
w->style()->unpolish(w);
w->style()->polish(w);
}
void HealthUI::setString(QLabel *w,QString s)
{
w->setText(s);
}
void HealthUI::setColor(uint32_t pos,state sta)
{
if(LabelMap.keys().contains(pos))
{
QLabel *label = LabelMap.value(pos);
if(label)
{
setState(label,sta);
}
}
else
{
//找不到就不设置
}
}
void HealthUI::setValue(uint32_t pos,QVariant sta)
{
if(LabelMap.contains(pos))
{
QLabel *label = LabelMap.value(pos);
if(label)
{
setString(label,sta.toString());
}
}
else
{
//找不到就不设置
}
}
void HealthUI::Install(QVariant name,int key,state s)
{
//查找没有被占用的位置
if(!LabelMap.contains(key))//如果没有就新建
{
QLabel *l = new QLabel(name.toString());
l->setObjectName("label_" + key);
l->setFixedHeight(20);
l->setAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
LabelMap.insert(key,l);
int row,column;
row = (key - 1)/5;
column = (key - 1)%5;
ui->gridLayout->addWidget(l,row,column);
setState(l,s);
}
else //如果已经有了,那么就修改名字、状态
{
QLabel *label = LabelMap.value(key);
setState(label,s);
setString(label,name.toString());
}
int row = 0;
if(LabelMap.size() > 0)
{
foreach (int key, LabelMap.keys()) {
int n = (key - 1)/5 + 1;
if(n >= row)
{
row = n;
}
}
//this->resize(400,26 * row + 36);
this->resize(400,26 * row + 0);
}
else
{
this->resize(400,0);
}
}
QLabel *HealthUI::findLabel(int key)
{
if(LabelMap.contains(key))
{
return LabelMap.value(key);
}
return nullptr;
}
void HealthUI::AllLabel(void)
{
QObjectList objlist = ui->groupBox->children();
foreach (QObject *obj, objlist)
{
QLabel *label = qobject_cast<QLabel *>(obj);
if(label)
{
QStringList namelist = label->objectName().split(QLatin1Char('_'));
QString num = namelist.at(namelist.size() - 1);
bool ret;
int number = num.toInt(&ret);
if(ret == true)
{
LabelMap.insert(number,label);
}
else
{
LabelMap.insert(1,label);
}
}
}
}
void HealthUI::setInital(void)
{
foreach (QLabel *l, LabelMap) {
setState(l,state::inital);
}
}
void HealthUI::setFailure(void)
{
foreach (QLabel *l, LabelMap) {
setState(l,state::failure);
}
}
void HealthUI::setSuccess(void)
{
foreach (QLabel *l, LabelMap) {
setState(l,state::success);
}
}
void HealthUI::setWarning(void)
{
foreach (QLabel *l, LabelMap) {
setState(l,state::warning);
}
}