2021-01-12 12:15:03 +08:00
|
|
|
#include "StateWidget.h"
|
|
|
|
|
|
2021-03-05 15:32:31 +08:00
|
|
|
StateWidget::StateWidget(int flag,int index,QWidget *parent) : QWidget(parent)
|
2021-01-12 12:15:03 +08:00
|
|
|
{
|
2021-06-04 19:26:47 +08:00
|
|
|
this->setMouseTracking(true);
|
|
|
|
|
|
2021-01-12 12:15:03 +08:00
|
|
|
gridlayout = new QGridLayout(this);
|
|
|
|
|
gridlayout->setMargin(0);
|
|
|
|
|
gridlayout->setVerticalSpacing(6);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
title = new QLabel("new status");
|
2021-06-04 19:26:47 +08:00
|
|
|
|
|
|
|
|
QFont font;
|
|
|
|
|
font.setFamily("Arial");
|
|
|
|
|
font.setBold(false);
|
|
|
|
|
font.setPixelSize(20);
|
|
|
|
|
title->setFont(font);
|
|
|
|
|
|
2021-01-12 12:15:03 +08:00
|
|
|
title->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
|
2021-04-25 09:28:46 +08:00
|
|
|
title->setFixedSize(w/2,h+m_offset);
|
2021-01-12 12:15:03 +08:00
|
|
|
|
2021-04-14 18:23:36 +08:00
|
|
|
gridlayout->addWidget(title,0,0,1,1);
|
2021-01-12 12:15:03 +08:00
|
|
|
|
|
|
|
|
if(flag == 0)
|
|
|
|
|
{
|
|
|
|
|
label = new QLabel("0");
|
2021-06-04 19:26:47 +08:00
|
|
|
|
|
|
|
|
QFont font;
|
|
|
|
|
font.setFamily("Arial");
|
|
|
|
|
font.setBold(false);
|
|
|
|
|
font.setPixelSize(20);
|
|
|
|
|
label->setFont(font);
|
|
|
|
|
|
2021-01-12 12:15:03 +08:00
|
|
|
label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
2021-04-25 09:28:46 +08:00
|
|
|
label->setFixedSize(w/2,h+m_offset);
|
2021-04-14 18:23:36 +08:00
|
|
|
setColor(state::gray);
|
|
|
|
|
gridlayout->addWidget(label,0,1,1,1);
|
2021-01-12 12:15:03 +08:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
bar = new QProgressBar();
|
2021-06-04 19:26:47 +08:00
|
|
|
|
|
|
|
|
QFont font;
|
|
|
|
|
font.setFamily("Arial");
|
|
|
|
|
font.setBold(false);
|
|
|
|
|
font.setPixelSize(20);
|
|
|
|
|
bar->setFont(font);
|
|
|
|
|
|
2021-01-12 12:15:03 +08:00
|
|
|
bar->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
|
|
|
|
bar->setRange(0,100);
|
|
|
|
|
bar->setValue(0);
|
2021-04-25 09:28:46 +08:00
|
|
|
bar->setFixedSize(w/2,h+m_offset);
|
2021-04-14 18:23:36 +08:00
|
|
|
gridlayout->addWidget(bar,0,1,1,1);
|
2021-01-12 12:15:03 +08:00
|
|
|
}
|
2021-04-14 18:23:36 +08:00
|
|
|
|
|
|
|
|
this->setLayout(gridlayout);
|
2021-04-25 09:28:46 +08:00
|
|
|
this->resize(w,h+ 2 * m_offset);
|
2021-01-12 12:15:03 +08:00
|
|
|
}
|
|
|
|
|
|
2021-03-05 15:32:31 +08:00
|
|
|
StateWidget::StateWidget(int flag, QString t,QVariant v,state s,int index, QWidget *parent) : QWidget(parent)
|
2021-01-12 12:15:03 +08:00
|
|
|
{
|
2021-06-04 19:26:47 +08:00
|
|
|
this->setMouseTracking(true);
|
2021-03-05 15:32:31 +08:00
|
|
|
|
|
|
|
|
id = index;
|
|
|
|
|
|
2021-01-12 12:15:03 +08:00
|
|
|
gridlayout = new QGridLayout(this);
|
|
|
|
|
gridlayout->setMargin(0);
|
|
|
|
|
gridlayout->setVerticalSpacing(6);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
title = new QLabel(t);
|
2021-06-04 19:26:47 +08:00
|
|
|
|
|
|
|
|
QFont font;
|
|
|
|
|
font.setFamily("Arial");
|
|
|
|
|
font.setBold(false);
|
|
|
|
|
font.setPixelSize(20);
|
|
|
|
|
title->setFont(font);
|
|
|
|
|
|
2021-01-12 12:15:03 +08:00
|
|
|
title->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
|
2021-04-25 09:28:46 +08:00
|
|
|
title->setFixedSize(w/2,h+m_offset);
|
2021-01-12 12:15:03 +08:00
|
|
|
|
2021-04-14 18:23:36 +08:00
|
|
|
gridlayout->addWidget(title,0,0,1,1);
|
2021-01-12 12:15:03 +08:00
|
|
|
|
|
|
|
|
if(flag == 0)
|
|
|
|
|
{
|
|
|
|
|
label = new QLabel(v.toString());
|
2021-06-04 19:26:47 +08:00
|
|
|
|
|
|
|
|
QFont font;
|
|
|
|
|
font.setFamily("Arial");
|
|
|
|
|
font.setBold(false);
|
|
|
|
|
font.setPixelSize(20);
|
|
|
|
|
label->setFont(font);
|
|
|
|
|
|
2021-01-12 12:15:03 +08:00
|
|
|
label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
2021-04-25 09:28:46 +08:00
|
|
|
label->setFixedSize(w/2,h+m_offset);
|
2021-04-14 18:23:36 +08:00
|
|
|
setColor(s);
|
|
|
|
|
gridlayout->addWidget(label,0,1,1,1);
|
2021-01-12 12:15:03 +08:00
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
bar = new QProgressBar();
|
2021-06-04 19:26:47 +08:00
|
|
|
|
|
|
|
|
QFont font;
|
|
|
|
|
font.setFamily("Arial");
|
|
|
|
|
font.setBold(false);
|
|
|
|
|
font.setPixelSize(20);
|
|
|
|
|
bar->setFont(font);
|
|
|
|
|
|
2021-04-14 18:23:36 +08:00
|
|
|
bar->setFormat("%v");
|
2021-01-12 12:15:03 +08:00
|
|
|
bar->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
|
|
|
|
|
bar->setRange(0,100);
|
|
|
|
|
bar->setValue(v.toDouble());
|
2021-04-25 09:28:46 +08:00
|
|
|
bar->setFixedSize(w/2,h+m_offset);
|
2021-04-14 18:23:36 +08:00
|
|
|
gridlayout->addWidget(bar,0,1,1,1);
|
2021-01-12 12:15:03 +08:00
|
|
|
}
|
2021-04-14 18:23:36 +08:00
|
|
|
|
|
|
|
|
this->setLayout(gridlayout);
|
2021-04-25 09:28:46 +08:00
|
|
|
this->resize(w,h + 2 * m_offset);
|
2021-01-12 12:15:03 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2021-04-14 18:23:36 +08:00
|
|
|
StateWidget::~StateWidget()
|
|
|
|
|
{
|
|
|
|
|
if(title)
|
|
|
|
|
{
|
|
|
|
|
delete title;
|
|
|
|
|
}
|
2021-01-12 12:15:03 +08:00
|
|
|
|
2021-04-14 18:23:36 +08:00
|
|
|
if(label)
|
|
|
|
|
{
|
|
|
|
|
delete label;
|
|
|
|
|
}
|
2021-01-12 12:15:03 +08:00
|
|
|
|
2021-04-14 18:23:36 +08:00
|
|
|
if(bar)
|
|
|
|
|
{
|
|
|
|
|
delete bar;
|
|
|
|
|
}
|
2021-01-12 12:15:03 +08:00
|
|
|
|
2021-04-14 18:23:36 +08:00
|
|
|
if(gridlayout)
|
|
|
|
|
{
|
|
|
|
|
delete gridlayout;
|
|
|
|
|
}
|
2021-01-12 12:15:03 +08:00
|
|
|
}
|
|
|
|
|
|
2021-06-04 19:26:47 +08:00
|
|
|
void StateWidget::mousePressEvent(QMouseEvent *event)
|
|
|
|
|
{
|
|
|
|
|
Q_UNUSED(event)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void StateWidget::mouseReleaseEvent(QMouseEvent *event)
|
|
|
|
|
{
|
|
|
|
|
Q_UNUSED(event)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void StateWidget::mouseMoveEvent(QMouseEvent *event)
|
|
|
|
|
{
|
|
|
|
|
Q_UNUSED(event)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void StateWidget::enterEvent(QEvent * event)
|
|
|
|
|
{
|
|
|
|
|
Q_UNUSED(event)
|
|
|
|
|
|
|
|
|
|
this->resize(this->size().width() + 6,this->height() + 6);
|
|
|
|
|
|
|
|
|
|
if(title)
|
|
|
|
|
{
|
|
|
|
|
QFont font = title->font();
|
|
|
|
|
font.setBold(true);
|
|
|
|
|
font.setPixelSize(23);
|
|
|
|
|
title->setFont(font);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(label)
|
|
|
|
|
{
|
|
|
|
|
QFont font = label->font();
|
|
|
|
|
font.setBold(true);
|
|
|
|
|
font.setPixelSize(23);
|
|
|
|
|
label->setFont(font);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(bar)
|
|
|
|
|
{
|
|
|
|
|
QFont font = bar->font();
|
|
|
|
|
font.setBold(true);
|
|
|
|
|
font.setPixelSize(23);
|
|
|
|
|
bar->setFont(font);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void StateWidget::leaveEvent(QEvent *event)
|
|
|
|
|
{
|
|
|
|
|
this->resize(this->size().width() - 6,this->height() - 6);
|
|
|
|
|
|
|
|
|
|
if(title)
|
|
|
|
|
{
|
|
|
|
|
QFont font = title->font();
|
|
|
|
|
font.setBold(false);
|
|
|
|
|
font.setPixelSize(20);
|
|
|
|
|
title->setFont(font);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(label)
|
|
|
|
|
{
|
|
|
|
|
QFont font = label->font();
|
|
|
|
|
font.setBold(false);
|
|
|
|
|
font.setPixelSize(20);
|
|
|
|
|
label->setFont(font);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(bar)
|
|
|
|
|
{
|
|
|
|
|
QFont font = bar->font();
|
|
|
|
|
font.setBold(false);
|
|
|
|
|
font.setPixelSize(20);
|
|
|
|
|
bar->setFont(font);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2021-01-12 12:15:03 +08:00
|
|
|
|
2021-04-14 18:23:36 +08:00
|
|
|
void StateWidget::setColor(state s)
|
|
|
|
|
{
|
|
|
|
|
if(label)
|
|
|
|
|
{
|
|
|
|
|
label->setProperty("state",s);
|
|
|
|
|
label->style()->unpolish(label);
|
|
|
|
|
label->style()->polish(label);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if(bar)
|
|
|
|
|
{
|
|
|
|
|
bar->setProperty("state",s);
|
|
|
|
|
bar->style()->unpolish(bar);
|
|
|
|
|
bar->style()->polish(bar);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void StateWidget::setValue(QString s)
|
2021-01-12 12:15:03 +08:00
|
|
|
{
|
2021-04-14 18:23:36 +08:00
|
|
|
if(label)
|
|
|
|
|
{
|
|
|
|
|
label->setText(s);
|
|
|
|
|
}
|
|
|
|
|
|
2021-06-30 17:05:06 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
bool flag = false;
|
2021-07-09 17:17:01 +08:00
|
|
|
double num = s.toDouble(&flag);
|
2021-06-30 17:05:06 +08:00
|
|
|
|
2021-07-09 17:17:01 +08:00
|
|
|
double value = (qIsNaN(num))?(0):(num);
|
2021-06-30 17:05:06 +08:00
|
|
|
|
2021-04-14 18:23:36 +08:00
|
|
|
if(bar)
|
|
|
|
|
{
|
2021-05-22 14:34:09 +08:00
|
|
|
|
|
|
|
|
if(value > bar->maximum())
|
|
|
|
|
{
|
2021-07-09 17:17:01 +08:00
|
|
|
bar->setRange(min,value);
|
|
|
|
|
}
|
|
|
|
|
else if(value > bar->minimum())
|
|
|
|
|
{
|
|
|
|
|
bar->setRange(value,max);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
bar->setRange(min,max);
|
2021-05-22 14:34:09 +08:00
|
|
|
}
|
|
|
|
|
|
2021-06-30 17:05:06 +08:00
|
|
|
bar->setValue(value);
|
2021-04-14 18:23:36 +08:00
|
|
|
}
|
2021-05-22 14:34:09 +08:00
|
|
|
|
2021-06-30 17:05:06 +08:00
|
|
|
|
2021-06-03 23:01:25 +08:00
|
|
|
if(flag)//number
|
2021-05-22 14:34:09 +08:00
|
|
|
{
|
2021-06-03 23:01:25 +08:00
|
|
|
double last = min;
|
2021-05-22 14:34:09 +08:00
|
|
|
|
2021-06-03 23:01:25 +08:00
|
|
|
for (QMap<QVariant,state>::iterator i = stateMap.begin(); i != stateMap.end(); ++i) {
|
|
|
|
|
|
2021-06-04 19:26:47 +08:00
|
|
|
if(i == stateMap.begin())
|
2021-05-22 14:34:09 +08:00
|
|
|
{
|
2021-06-04 19:26:47 +08:00
|
|
|
if(value < i.key().toDouble())
|
|
|
|
|
{
|
|
|
|
|
setColor(state::red);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
if((value >= last) &&(value <= i.key().toDouble()))
|
|
|
|
|
{
|
|
|
|
|
setColor(i.value());
|
|
|
|
|
break;
|
|
|
|
|
}
|
2021-05-22 14:34:09 +08:00
|
|
|
}
|
2021-06-03 23:01:25 +08:00
|
|
|
|
|
|
|
|
last = i.key().toDouble();
|
|
|
|
|
|
2021-06-04 19:26:47 +08:00
|
|
|
if((i+1) == stateMap.end())//overflow is red
|
2021-05-22 14:34:09 +08:00
|
|
|
{
|
2021-06-04 19:26:47 +08:00
|
|
|
if(value > (i+1).key().toDouble())
|
2021-06-03 23:01:25 +08:00
|
|
|
{
|
|
|
|
|
setColor(state::red);
|
2021-06-04 19:26:47 +08:00
|
|
|
break;
|
2021-06-03 23:01:25 +08:00
|
|
|
}
|
2021-05-22 14:34:09 +08:00
|
|
|
}
|
2021-06-03 23:01:25 +08:00
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else //not a number
|
|
|
|
|
{
|
|
|
|
|
if(stateMap.keys().contains(s))
|
|
|
|
|
{
|
|
|
|
|
setColor(stateMap.value(s));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
setColor(state::gray);
|
2021-05-22 14:34:09 +08:00
|
|
|
}
|
|
|
|
|
}
|
2021-06-27 18:25:22 +08:00
|
|
|
|
2021-01-12 12:15:03 +08:00
|
|
|
}
|
|
|
|
|
|
2021-04-14 18:23:36 +08:00
|
|
|
void StateWidget::setRange(double m_min,double m_max)
|
2021-01-12 12:15:03 +08:00
|
|
|
{
|
2021-04-14 18:23:36 +08:00
|
|
|
min = m_min;
|
|
|
|
|
max = m_max;
|
|
|
|
|
|
|
|
|
|
if(bar)
|
|
|
|
|
{
|
2021-07-09 17:17:01 +08:00
|
|
|
bar->setRange(min,max);
|
2021-04-14 18:23:36 +08:00
|
|
|
}
|
2021-01-12 12:15:03 +08:00
|
|
|
}
|
|
|
|
|
|
2021-06-03 23:01:25 +08:00
|
|
|
void StateWidget::setStats(QMap<QVariant, state> l)
|
|
|
|
|
{
|
|
|
|
|
stateMap = l;
|
|
|
|
|
}
|
2021-01-12 12:15:03 +08:00
|
|
|
|
|
|
|
|
|
2021-04-14 18:23:36 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|