#include "chart_page.h"
|
#include "ui_chart_page.h"
|
|
#include"Common/classxml.h"
|
#include"IMEKeyBoard/keyboard_num.h"
|
|
Chart_Page::Chart_Page(QWidget *parent, QString dataName, Work_Thread *thread) :
|
customDialog(parent),
|
ui(new Ui::Chart_Page)
|
{
|
ui->setupUi(this);
|
work_thread = thread;
|
set_btn_beep(ui->tabWidget,SIGNAL(currentChanged(int)));
|
set_btn_beep(ui->edit_mon_id,SIGNAL(custom_click()));
|
set_btn_beep(ui->pushButton_Return,SIGNAL(pressed()));
|
set_btn_beep(ui->pushButton_MonLast,SIGNAL(pressed()));
|
set_btn_beep(ui->pushButton_MonNext,SIGNAL(pressed()));
|
|
connect(ui->tabWidget,SIGNAL(currentChanged(int)),this,SLOT(TabChangeSlot(int)));
|
connect(ui->edit_mon_id,SIGNAL(custom_click()),this,SLOT(CustomEditSlot()));
|
connect(ui->pushButton_Return,SIGNAL(released()),this,SLOT(ChartBtnSlot()));
|
connect(ui->pushButton_MonLast,SIGNAL(released()),this,SLOT(ChartBtnSlot()));
|
connect(ui->pushButton_MonNext,SIGNAL(released()),this,SLOT(ChartBtnSlot()));
|
|
ui->pushButton_MonLast->setVisible(false);
|
ui->pushButton_MonNext->setVisible(false);
|
ui->comboBox_GroupM->setVisible(false);
|
ui->edit_mon_id->setVisible(false);
|
monID = 1;
|
CBGroupIndex = 1;
|
if(ClassXML::AnalysisDataFBO(dataDir+dataName,test_info))
|
{
|
group_num = test_info.fbo_data_head_start.BattGroup;
|
mon_num = test_info.fbo_data_head_start.BattSum;
|
}
|
if(mon_num == 0){
|
ui->tabWidget->removeTab(2);
|
}
|
ui->edit_mon_id->setText(QString::number(monID)+"/"+
|
QString::number(mon_num));
|
|
init_chart();
|
if(ClassXML::GetGroupVolFBO(dataDir+dataName,vector_groupvol,
|
vector_cur,vector_cap,
|
vector_second,vector_mon))
|
{
|
update_chart(vector_groupvol,vector_cur,vector_second,vector_mon);
|
}
|
|
set_btn_beep(ui->comboBox_GroupM,SIGNAL(activated(int)));
|
connect(ui->comboBox_GroupM,SIGNAL(currentIndexChanged(int)),this,SLOT(GroupMComboBoxChangeSlot(int)));
|
QPixmap pixmap(1, 50);
|
pixmap.fill(Qt::transparent);
|
QIcon icon(pixmap);
|
ui->comboBox_GroupM->setIconSize(QSize(1, 50));
|
if(group_num != 1)
|
{
|
for(int i=0;i<group_num;i++)
|
{
|
ui->comboBox_GroupM->addItem(icon,tr("组")+QString::number(i+1));
|
}
|
}
|
ui->edit_mon_id->setAlignment(Qt::AlignCenter);
|
}
|
|
Chart_Page::~Chart_Page()
|
{
|
delete ui;
|
}
|
|
void Chart_Page::TabChangeSlot(int index)
|
{
|
switch(index)
|
{
|
case 0:
|
ui->pushButton_MonLast->setVisible(false);
|
ui->pushButton_MonNext->setVisible(false);
|
ui->comboBox_GroupM->setVisible(false);
|
ui->edit_mon_id->setVisible(false);
|
break;
|
case 1:
|
ui->pushButton_MonLast->setVisible(false);
|
ui->pushButton_MonNext->setVisible(false);
|
ui->comboBox_GroupM->setVisible(false);
|
ui->edit_mon_id->setVisible(false);
|
break;
|
case 2:
|
if(group_num == 1)
|
ui->comboBox_GroupM->setVisible(false);
|
else
|
ui->comboBox_GroupM->setVisible(true);
|
ui->pushButton_MonLast->setVisible(true);
|
ui->pushButton_MonNext->setVisible(true);
|
ui->edit_mon_id->setVisible(true);
|
break;
|
}
|
}
|
|
void Chart_Page::CustomEditSlot()
|
{
|
//Custom_LineEdit *le = dynamic_cast<Custom_LineEdit*>(sender());
|
setEditInput(ui->edit_mon_id,1,mon_num);
|
update_mon_chart(monID-1);
|
}
|
|
void Chart_Page::ChartBtnSlot()
|
{
|
QPushButton *pb = dynamic_cast<QPushButton*>(sender());
|
if(ui->pushButton_Return == pb)
|
{
|
closeCustom(false);
|
}
|
else if(ui->pushButton_MonLast == pb)
|
{
|
monID--;
|
if(monID < 1)
|
monID = mon_num;
|
ui->edit_mon_id->setText(QString::number(monID)+"/"+
|
QString::number(mon_num));
|
update_mon_chart(monID-1);
|
}
|
else if(ui->pushButton_MonNext == pb)
|
{
|
monID++;
|
if(monID > mon_num)
|
monID = 1;
|
ui->edit_mon_id->setText(QString::number(monID)+"/"+
|
QString::number(mon_num));
|
update_mon_chart(monID-1);
|
}
|
}
|
|
//**************初始化图表******************//
|
void Chart_Page::init_chart(void)
|
{
|
// set transparent background gradient:
|
QLinearGradient gradient(0,0,0,0);
|
gradient.setColorAt(0, QColor(0,0,0,0));
|
ui->chart_vol->setBackground(QBrush(gradient));
|
ui->chart_cur->setBackground(QBrush(gradient));
|
ui->chart_monomer->setBackground(QBrush(gradient));
|
|
// prepare x axis:
|
ui->chart_vol->xAxis->setSubTicks(false);//是否显示小刻度
|
ui->chart_vol->xAxis->setBasePen(QPen(Qt::white));//基础线条画笔
|
ui->chart_vol->xAxis->setTickPen(QPen(Qt::white));//文本画笔
|
ui->chart_vol->xAxis->setTickLabelColor(Qt::white);//文本颜色
|
ui->chart_vol->xAxis->setLabelColor(Qt::white);//坐标轴名称颜色
|
ui->chart_cur->xAxis->setSubTicks(false);//是否显示小刻度
|
ui->chart_cur->xAxis->setBasePen(QPen(Qt::white));//基础线条画笔
|
ui->chart_cur->xAxis->setTickPen(QPen(Qt::white));//文本画笔
|
ui->chart_cur->xAxis->setTickLabelColor(Qt::white);//文本颜色
|
ui->chart_cur->xAxis->setLabelColor(Qt::white);//坐标轴名称颜色
|
ui->chart_monomer->xAxis->setSubTicks(false);//是否显示小刻度
|
ui->chart_monomer->xAxis->setBasePen(QPen(Qt::white));//基础线条画笔
|
ui->chart_monomer->xAxis->setTickPen(QPen(Qt::white));//文本画笔
|
ui->chart_monomer->xAxis->setTickLabelColor(Qt::white);//文本颜色
|
ui->chart_monomer->xAxis->setLabelColor(Qt::white);//坐标轴名称颜色
|
// prepare y axis:
|
ui->chart_vol->yAxis->setRange(0, 50);
|
ui->chart_vol->yAxis->setLabel(" ");
|
ui->chart_vol->yAxis->setBasePen(QPen(Qt::white));
|
ui->chart_vol->yAxis->setTickPen(QPen(Qt::white));
|
ui->chart_vol->yAxis->setSubTickPen(QPen(Qt::white));
|
ui->chart_vol->yAxis->setTickLabelColor(Qt::white);
|
ui->chart_vol->yAxis->setLabelColor(Qt::white);
|
ui->chart_cur->yAxis->setRange(0, 30);
|
ui->chart_cur->yAxis->setLabel(" ");
|
ui->chart_cur->yAxis->setBasePen(QPen(Qt::white));
|
ui->chart_cur->yAxis->setTickPen(QPen(Qt::white));
|
ui->chart_cur->yAxis->setSubTickPen(QPen(Qt::white));
|
ui->chart_cur->yAxis->setTickLabelColor(Qt::white);
|
ui->chart_cur->yAxis->setLabelColor(Qt::white);
|
ui->chart_monomer->yAxis->setRange(0, 15);
|
ui->chart_monomer->yAxis->setLabel(" ");//"(#001)V"
|
ui->chart_monomer->yAxis->setBasePen(QPen(Qt::white));
|
ui->chart_monomer->yAxis->setTickPen(QPen(Qt::white));
|
ui->chart_monomer->yAxis->setSubTickPen(QPen(Qt::white));
|
ui->chart_monomer->yAxis->setTickLabelColor(Qt::white);
|
ui->chart_monomer->yAxis->setLabelColor(Qt::white);
|
|
ui->chart_vol->addGraph();
|
ui->chart_vol->graph()->setPen(QPen(Qt::green,3));
|
|
ui->chart_cur->addGraph();
|
ui->chart_cur->graph()->setLineStyle(QCPGraph::lsLine);
|
ui->chart_cur->graph()->setPen(QPen(Qt::red,3));
|
|
ui->chart_monomer->addGraph();
|
ui->chart_monomer->graph()->setPen(QPen(Qt::green,3));
|
|
QSharedPointer<QCPAxisTickerTime> timeTicker(new QCPAxisTickerTime);
|
timeTicker->setTimeFormat("%h:%m:%s");
|
ui->chart_vol->xAxis->setTicker(timeTicker);
|
ui->chart_cur->xAxis->setTicker(timeTicker);
|
ui->chart_monomer->xAxis->setTicker(timeTicker);
|
|
QFont legendFont = font();
|
legendFont.setPointSize(18);
|
ui->chart_vol->yAxis->setLabelFont(legendFont);
|
ui->chart_vol->xAxis->setTickLabelFont(legendFont);
|
ui->chart_vol->yAxis->setTickLabelFont(legendFont);
|
ui->chart_cur->yAxis->setLabelFont(legendFont);
|
ui->chart_cur->xAxis->setTickLabelFont(legendFont);
|
ui->chart_cur->yAxis->setTickLabelFont(legendFont);
|
ui->chart_monomer->yAxis->setLabelFont(legendFont);
|
ui->chart_monomer->xAxis->setTickLabelFont(legendFont);
|
ui->chart_monomer->yAxis->setTickLabelFont(legendFont);
|
}
|
|
//**************更新图表******************//
|
void Chart_Page::update_chart(QVector<int> vol,
|
QVector<int> cur, QVector<int> second,
|
QVector<QVector<int> > mon)
|
{
|
QVector<double> xv(vol.count()) , yv(vol.count());
|
for(int i=0;i<vol.count();i++)
|
{
|
xv[i] = second.at(i);
|
yv[i] = (double)vol.at(i)/10;
|
}
|
ui->chart_vol->graph()->setData(xv, yv);
|
ui->chart_vol->xAxis->setRange(0, second.at(second.count()-1)*1.2);
|
ui->chart_vol->yAxis->setRange(0, get_top_chart(yv));
|
ui->chart_vol->replot();
|
|
QVector<double> xc(cur.count()+1) , yc(cur.count()+1);
|
for(int i=0;i<cur.count();i++)
|
{
|
xc[i] = second.at(i);
|
yc[i] = (double)cur.at(i)/10;
|
}
|
xc.append(second.at(cur.count()-1)+0.001);
|
yc.append(0);
|
ui->chart_cur->xAxis->setRange(0, second.at(second.count()-1)*1.2);
|
ui->chart_cur->yAxis->setRange(0, get_top_chart(yc));
|
ui->chart_cur->graph()->setData(xc, yc);
|
ui->chart_cur->replot();
|
if(mon.count()>0){
|
QVector<double> x(mon.at(0).count()) , y(mon.at(0).count());
|
for(int i=0;i<mon.at(0).count();i++)
|
{
|
x[i] = second.at(i);
|
// y[i] = (double)mon.at(0).at(i)/1000;
|
if(test_info.fbo_data_head_start.DataVersion==0x05)
|
y[i] = (double)ClassXML::getMonomerVol(MONO_TYPE_WIRED,mon.at(0).at(i))/1000;
|
else
|
y[i] = (double)mon.at(0).at(i)/1000;
|
}
|
ui->chart_monomer->xAxis->setRange(0, second.at(second.count()-1)*1.2);
|
ui->chart_monomer->yAxis->setRange(0, get_top_chart(y));
|
|
ui->chart_monomer->graph()->setData(x, y);
|
ui->chart_monomer->replot();
|
}
|
}
|
|
void Chart_Page::update_mon_chart(int id)
|
{
|
if(id<0 || id>=mon_num)
|
return;
|
int nowindex = (CBGroupIndex-1)*mon_num+id;
|
|
if(vector_mon.count()<=0 || vector_second.count()<=0 || nowindex>=vector_mon.count())
|
return;
|
QVector<double> x(vector_mon.at(nowindex).count()) , y(vector_mon.at(nowindex).count());
|
for(int i=0;i<vector_mon.at(nowindex).count();i++)
|
{
|
x[i] = vector_second.at(i);
|
// y[i] = (double)vector_mon.at(nowindex).at(i)/1000;
|
if(test_info.fbo_data_head_start.DataVersion==0x05)
|
y[i] = (double)ClassXML::getMonomerVol(MONO_TYPE_WIRED,vector_mon.at(nowindex).at(i))/1000;
|
else
|
y[i] = (double)vector_mon.at(nowindex).at(i)/1000;
|
}
|
ui->chart_monomer->xAxis->setRange(0, vector_second.at(vector_second.count()-1));
|
ui->chart_monomer->yAxis->setRange(0, get_top_chart(y));
|
|
ui->chart_monomer->graph()->setData(x, y);
|
ui->chart_monomer->replot();
|
}
|
|
//**************实时曲线上限******************//
|
double Chart_Page::get_top_chart(QVector<double> data_v){
|
double top = data_v.at(0);
|
for(int i=1;i<data_v.count();i++){
|
if(data_v.at(i) > top)
|
top = data_v.at(i);
|
}
|
top *= 1.2;
|
return (top);
|
}
|
//************格式化单体电压*****************//
|
QString Chart_Page::format_monID(int index)
|
{
|
//格式化输出#001格式的单体编号
|
return QString("%1%2").arg("#").arg(index,3,10,QChar('0'));
|
}
|
|
void Chart_Page::setEditInput(Custom_LineEdit *edit,int min, int max)
|
{
|
edit->setStyleSheet("color:red");
|
KeyBoard_Num keyboard(this,INPUT_ALLNO,work_thread);
|
keyboard.setGeometry(440,120,300,350);
|
keyboard.execKeyboard();
|
edit->setStyleSheet("color:black");
|
DATA_KB_RTN kbdata = keyboard.get_kb_data();
|
if(kbdata.If_OK)
|
{
|
int input = kbdata.set_text.toInt();
|
if(input>=min && input<=max)
|
{
|
//edit->setText(QString::number(input,'f',floatNum));
|
monID = input;
|
edit->setText(QString::number(monID)+"/"+
|
QString::number(mon_num));
|
}
|
}
|
}
|
|
void Chart_Page::GroupMComboBoxChangeSlot(int index)
|
{
|
CBGroupIndex = index+1;
|
update_mon_chart(monID-1);
|
}
|