#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;icomboBox_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(sender()); setEditInput(ui->edit_mon_id,1,mon_num); update_mon_chart(monID-1); } void Chart_Page::ChartBtnSlot() { QPushButton *pb = dynamic_cast(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 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 vol, QVector cur, QVector second, QVector > mon) { QVector xv(vol.count()) , yv(vol.count()); for(int i=0;ichart_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 xc(cur.count()+1) , yc(cur.count()+1); for(int i=0;ichart_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 x(mon.at(0).count()) , y(mon.at(0).count()); for(int i=0;ichart_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 x(vector_mon.at(nowindex).count()) , y(vector_mon.at(nowindex).count()); for(int i=0;ichart_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 data_v){ double top = data_v.at(0); for(int i=1;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); }