#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(); Install("内置惯导",1,state::inital); Install("航姿",2,state::inital); Install("舵控",3,state::inital); Install("发射回收器",4,state::inital); Install("选择内置",5,state::inital); Install("舵控上电自检",6,state::inital); Install("舵控地面自检",7,state::inital); Install("记录打开",8,state::inital); Install("外置记录",9,state::inital);//1,绿,2,黄 Install("正在写入",10,state::inital);//3 Install("气囊充气",11,state::inital); Install("开伞",12,state::inital); Install("切伞",13,state::inital); Install("上行有效",14,state::inital); Install("大气机",16,state::inital); Install("MS5525",17,state::inital); Install("MS5803",18,state::inital); Install("迎角",19,state::inital); Install("侧滑角",20,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); setState(label,sta); } else { //找不到就不设置 } } void HealthUI::setValue(uint32_t pos,QVariant sta) { if(LabelMap.contains(pos)) { QLabel *label = LabelMap.value(pos); 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); } 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(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); } }