#include "DataGraphView.h" #include "ui_DataGraphView.h" #include #include "log.h" #define CHANNELID_ROLE (Qt::UserRole + 2) #define CHANNELTYPE_ROLE (Qt::UserRole + 3) CDataGraphView::CDataGraphView(QWidget *parent) : QWidget(parent), ui(new Ui::CDataGraphView) { ui->setupUi(this); //ReadDat(); tracer = new QCPItemTracer(ui->widget_TimeGraph); tracer->setStyle(QCPItemTracer::tsCrosshair); tracer->setPen(QPen(Qt::red)); tracer->setBrush(Qt::red); tracer->setSize(6); tracer->setVisible(false); tracer->setInterpolating(false); QFont font; font.setPixelSize(20); tracerLabel = new QCPItemText(ui->widget_TimeGraph); tracerLabel->setLayer("overlay"); tracerLabel->setPen(QPen(Qt::white)); tracerLabel->setBrush(QColor(64, 156, 225)); tracerLabel->setPadding(QMargins(2,2,2,2));//边界宽度 tracerLabel->setPositionAlignment(Qt::AlignTop|Qt::AlignLeft);//文字布局:顶、左对齐 tracerLabel->position->setType(QCPItemPosition::ptAxisRectRatio);//位置类型(当前轴范围的比例为单位/实际坐标为单位) tracerLabel->position->setCoords(0, 0); tracerLabel->setFont(font); tracerLabel->setText(""); tracer2 = new QCPItemTracer(ui->widget_FsGraph); tracer2->setStyle(QCPItemTracer::tsCrosshair); tracer2->setPen(QPen(Qt::red)); tracer2->setBrush(Qt::red); tracer2->setSize(6); tracer2->setVisible(false); tracer2->setInterpolating(false); tracerLabel2 = new QCPItemText(ui->widget_FsGraph); tracerLabel2->setLayer("overlay"); tracerLabel2->setPen(QPen(Qt::white)); tracerLabel2->setBrush(QColor(64, 156, 225)); tracerLabel2->setPadding(QMargins(2,2,2,2));//边界宽度 tracerLabel2->setPositionAlignment(Qt::AlignTop|Qt::AlignLeft);//文字布局:顶、左对齐 tracerLabel2->position->setType(QCPItemPosition::ptAxisRectRatio);//位置类型(当前轴范围的比例为单位/实际坐标为单位) tracerLabel2->position->setCoords(0, 0); tracerLabel2->setFont(font); tracerLabel2->setText(""); connect(ui->widget_TimeGraph, SIGNAL(mouseMove(QMouseEvent*)), this, SLOT(mouseMoveEvent(QMouseEvent*))); connect(ui->widget_TimeGraph, SIGNAL(mouseDoubleClick(QMouseEvent*)), this, SLOT(mouseDoubleClickEvent(QMouseEvent*))); connect(ui->widget_FsGraph, SIGNAL(mouseMove(QMouseEvent*)), this, SLOT(mouseMoveEvent2(QMouseEvent*))); } CDataGraphView::~CDataGraphView() { ui->widget_TimeGraph->clearGraphs(); ui->widget_TimeGraph->plotLayout()->clear(); ui->widget_TimeGraph->destroyed(); QMap>::Iterator itermapWaveData = m_mapWaveData.begin(); for(itermapWaveData = m_mapWaveData.begin();itermapWaveData != m_mapWaveData.end();itermapWaveData++){ itermapWaveData->clear(); QVector().swap(itermapWaveData.value()); m_mapWaveData.erase(itermapWaveData); } delete ui; } void CDataGraphView::RemoveSeries() { tracer->setVisible(false); tracer2->setVisible(false); tracerLabel->setVisible(false); tracerLabel2->setVisible(false); ui->widget_TimeGraph->clearGraphs(); ui->widget_FsGraph->clearGraphs(); ui->widget_TimeGraph->replot(); ui->widget_FsGraph->replot(); ui->widget_FsGraph->replot(QCustomPlot::rpQueuedReplot);//刷新图表 } void CDataGraphView::ItemPressSlot(QTableWidgetItem *item) { if(!item) return; if(item->column() != 0) return; QString strID = item->data(CHANNELID_ROLE).toString(); QString strType = item->data(CHANNELTYPE_ROLE).toString(); if(item->isSelected() && !item->checkState()) { listChannelID.push_back(strID); item->setCheckState(Qt::Checked); item->setSelected(true); qDebug() << "Add1 channelID" << strID << endl; RemoveSeries(); emit ItemCheckStateSignal(strID, true); } else if(item->checkState() && !item->isSelected()) { item->setCheckState(Qt::Unchecked); emit ItemCheckStateSignal(strID, false); listChannelID.removeOne(strID); qDebug() << "remove1 channelID" << strID << endl; RemoveSeries(); } } void CDataGraphView::ItemChangedSlot(QTableWidgetItem *item) { if(!item) return; if(item->column() != 0) return; QString strID = item->data(CHANNELID_ROLE).toString(); QString strType = item->data(CHANNELTYPE_ROLE).toString(); if(item->checkState() && !item->isSelected()) { listChannelID.push_back(strID); item->setCheckState(Qt::Checked); item->setSelected(true); qDebug() << "Add2 channelID" << strID << endl; RemoveSeries(); emit ItemCheckStateSignal(strID, true); } else if(!item->checkState() && item->isSelected()) { item->setCheckState(Qt::Unchecked); item->setSelected(false); emit ItemCheckStateSignal(strID, false); listChannelID.removeOne(strID); qDebug() << "remove2 channelID" << strID << endl; RemoveSeries(); } } QTableWidgetItem * CDataGraphView::AddTableWgtItem(QString strText, QString clolor, QString strID) { ui->tableWidget->setRowCount(ui->tableWidget->rowCount() + 1); ui->tableWidget->setColumnWidth(0, 256); ui->tableWidget->setColumnWidth(1, 5); QTableWidgetItem *pItemName = new QTableWidgetItem(); pItemName->setText(strText); pItemName->setCheckState(Qt::Unchecked); QWidget *pWgt = new QWidget; QVBoxLayout *pLayout = new QVBoxLayout(pWgt); QLabel *pLabel = new QLabel(ui->tableWidget); pLabel->setFixedSize(20, 20); pLabel->setStyleSheet(QString("QLabel{background: rgb(%1)}").arg(clolor)); pLayout->addWidget(pLabel); pLayout->setMargin(0); pLayout->setAlignment(pLabel, Qt::AlignCenter); ui->tableWidget->setItem(ui->tableWidget->rowCount() - 1, 0, pItemName); ui->tableWidget->setCellWidget(ui->tableWidget->rowCount() - 1, 1, pWgt); m_mapChannelIDtoLabel[strID] = pItemName; return pItemName; } void CDataGraphView::SetDataIDs(const QStringList &strIDList, QString strTitle,const QStringList& strChannleTypeList,\ const QStringList& strChannleNameList) { disconnect(ui->tableWidget, SIGNAL(itemPressed(QTableWidgetItem *)), this, SLOT(ItemPressSlot(QTableWidgetItem *))); disconnect(ui->tableWidget, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(ItemChangedSlot(QTableWidgetItem *))); //m_listChannelID = strIDList; int i = 0; for(int j = 0; j < strIDList.size();j++) { QString strNum1 = strIDList[j].right(4).left(2); QString strNum2 = strIDList[j].right(2); QString strChannleType = ""; if(strChannleTypeList[j] == "ACCELEROMETER") { strChannleType = "加速度"; }else if(strChannleTypeList[j] == "PROXIMETER"){ strChannleType = "径向位移"; }else if(strChannleTypeList[j] == "VELOCITY"){ strChannleType = "速度"; }else if(strChannleTypeList[j] == "SLOW_CURRENT"){ strChannleType = "电流"; }else if(strChannleTypeList[j] == "THRUST"){ strChannleType = "轴向位移"; }else if(strChannleTypeList[j] == "TACHOMETER"){ strChannleType = "转速"; }else if(strChannleTypeList[j] == "MICROPHONE"){ strChannleType = "声音"; }else if(strChannleTypeList[j] == "FAST_VOLTAGE"){ strChannleType = "动态电压"; }else if(strChannleTypeList[j] == "PULSE_CURRENT"){ strChannleType = "高速电流"; } QString strText = QStringLiteral("%1-%2%3 (%4)").arg(strChannleNameList[j]).arg(strNum1).arg(strNum2).arg(strChannleType); //QString strText = QStringLiteral("%1").arg(strChannleType[j]); QString strColor = "0,255,0"; switch(i){ case 0: strColor = "0,255,0"; break; case 1: strColor = "30,144,255"; break; case 2: strColor = "255,182,193"; break; case 3: strColor = "0, 255, 255"; break; case 4: strColor = "255, 0, 255"; break; case 5: strColor = "255, 255, 0"; break; case 6: strColor = "255,69,0"; break; case 7: strColor = "0, 255, 127"; break; case 8: strColor = "255,140,0"; break; case 9: strColor = "0, 191, 255"; break; case 10: strColor = "139, 0, 139"; break; case 11: strColor = "211, 211, 211"; break; case 12: strColor = "205, 205, 0"; break; case 13: strColor = "153,51, 250"; break; case 14: strColor = "255, 218, 185"; break; case 15: strColor = "0, 199 ,140"; break; default: strColor = "0,255,0"; break; } i++; if(i > 15) i = 0; QTableWidgetItem *pItem = AddTableWgtItem(strText, strColor, strIDList[j]); pItem->setData(CHANNELID_ROLE, strIDList[j]); pItem->setData(CHANNELTYPE_ROLE, strChannleTypeList[j]); } connect(ui->tableWidget, SIGNAL(itemPressed(QTableWidgetItem *)), this, SLOT(ItemPressSlot(QTableWidgetItem *))); connect(ui->tableWidget, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(ItemChangedSlot(QTableWidgetItem *))); { m_mapChannelIDtoLabel[strIDList[0]]->setSelected(true); m_mapChannelIDtoLabel[strIDList[0]]->setCheckState(Qt::Checked); listChannelID.push_back(strIDList[0]); emit ItemCheckStateSignal(strIDList[0], true); //ViewData(strIDList[0]); } } void CDataGraphView::ViewData(QString& strChannelID,QVector& wavedata) { qDebug() << "ViewData" << endl; foreach (auto ID, listChannelID){ if(ID != strChannelID){ m_mapChannelIDtoLabel[ID]->setCheckState(Qt::Unchecked); m_mapChannelIDtoLabel[ID]->setSelected(false); } } m_strChannelID = strChannelID; m_wavedata = wavedata; int Time = wavedata.size(); ui->widget_TimeGraph->xAxis->setRange(1, Time); ui->widget_TimeGraph->xAxis->setLabel("Time(s)"); QVector key,value; key.reserve(Time*wavedata[0].waveData.size()); value.reserve(Time*wavedata[0].waveData.size()); qDebug() << "Time" << Time << endl; double gap = (double)1/(double)wavedata[0].waveData.size(); double f = 0.0; for(int i = 0; i < Time;i++){ for(int j = 0; j < wavedata[i].waveData.size();j++){ key.push_back(f); value.push_back(wavedata[i].waveData[j]-wavedata[i].mean); f += gap; } } ui->widget_TimeGraph->addGraph(ui->widget_TimeGraph->xAxis, ui->widget_TimeGraph->yAxis); QString str = QString("key size: %1,value size:%2").arg(key.size()).arg(value.size()); customLogMessageHandler(QtDebugMsg,str); ui->widget_TimeGraph->graph(0)->setData(key, value); QPen pen; pen.setColor(wavedata.at(0).linColor); pen.setStyle(Qt::SolidLine); ui->widget_TimeGraph->graph(0)->setPen(pen); ui->widget_TimeGraph->rescaleAxes(true); QString stryLabel = wavedata[0].sensorType + "(" + wavedata[0].sensorEngineeringUnit +")"; ui->widget_TimeGraph->yAxis->setLabel( stryLabel); ui->widget_TimeGraph->setSelectionRectMode(QCP::SelectionRectMode::srmNone); ui->widget_TimeGraph->setInteractions(QCP::iRangeZoom|QCP::iRangeDrag); QVector::iterator max = std::max_element(std::begin(value), std::end(value)); QVector::iterator min = std::min_element(std::begin(value), std::end(value)); double biggest = *max; double minimum = *min; ui->widget_TimeGraph->yAxis->setRange(minimum,biggest); ui->widget_TimeGraph->axisRect()->setRangeZoomFactor(1.2,1); ui->widget_TimeGraph->axisRect()->setRangeZoomAxes(ui->widget_TimeGraph->xAxis,ui->widget_TimeGraph->yAxis); ui->widget_TimeGraph->replot(); } void CDataGraphView::mouseMoveEvent2(QMouseEvent *event) { tracer2->setVisible(true); tracerLabel2->setVisible(true); //将像素点转换成qcustomplot中的坐标值,并通过setGraphKey将锚点值设为真实数据值。tracer->setGraphKey(xAxis->pixelToCoord(event->pos().x())); int graphCount = ui->widget_FsGraph->graphCount(); if(graphCount < 1) return; //获得鼠标位置处对应的横坐标数据x double x = ui->widget_FsGraph->xAxis->pixelToCoord(event->pos().x()); double y = ui->widget_FsGraph->xAxis->pixelToCoord(event->pos().y()); //遍历曲线 for (int i = 0; i < graphCount && tracer2->visible(); ++i) { //显示锚点 QCPGraph *mGraph = ui->widget_FsGraph->graph(i); tracer2->setGraph(mGraph);//将锚点设置到被选中的曲线上 tracer2->setGraphKey(x); //将游标横坐标设置成刚获得的横坐标数据x tracer2->updatePosition(); //使得刚设置游标的横纵坐标位置生效 double xValue = tracer2->position->key(); double yValue = tracer2->position->value(); tracerLabel2->setVisible(true); tracerLabel2->setText(QString("X: %1 Y: %2").arg( QString::number(xValue)).arg(QString::number(yValue))); //显示tip框 //QCPDataContainer::const_iterator coorPoint = ui->widget_TimeGraph->graph(0)->data().data()->findBegin(xValue, true);//true代表向左搜索 } //重绘 ui->widget_FsGraph->replot(); } void CDataGraphView::mouseMoveEvent(QMouseEvent *event) { tracer->setVisible(true); tracerLabel->setVisible(true); //将像素点转换成qcustomplot中的坐标值,并通过setGraphKey将锚点值设为真实数据值。tracer->setGraphKey(xAxis->pixelToCoord(event->pos().x())); int graphCount = ui->widget_TimeGraph->graphCount(); if(graphCount < 1) return; //获得鼠标位置处对应的横坐标数据x double x = ui->widget_TimeGraph->xAxis->pixelToCoord(event->pos().x()); double y = ui->widget_TimeGraph->xAxis->pixelToCoord(event->pos().y()); //遍历曲线 for (int i = 0; i < graphCount && tracer->visible(); ++i) { //显示锚点 QCPGraph *mGraph = ui->widget_TimeGraph->graph(i); tracer->setGraph(mGraph);//将锚点设置到被选中的曲线上 tracer->setGraphKey(x); //将游标横坐标设置成刚获得的横坐标数据x tracer->updatePosition(); //使得刚设置游标的横纵坐标位置生效 double xValue = tracer->position->key(); double yValue = tracer->position->value(); tracerLabel->setVisible(true); tracerLabel->setText(QString("X: %1 Y: %2").arg( QString::number(xValue)).arg(QString::number(yValue))); //显示tip框 //QCPDataContainer::const_iterator coorPoint = ui->widget_TimeGraph->graph(0)->data().data()->findBegin(xValue, true);//true代表向左搜索 } //重绘 ui->widget_TimeGraph->replot(); } void CDataGraphView::mouseDoubleClickEvent(QMouseEvent *event) { int graphCount = ui->widget_TimeGraph->graphCount(); if(graphCount < 1) return; qDebug()<<"mouseDoubleClickEvent" << endl; int x = ui->widget_TimeGraph->xAxis->pixelToCoord(event->pos().x()); ui->widget_FsGraph->xAxis->setLabel("Fs(Hz)"); QVector vecData,vecFFTSpecData; double sum = std::accumulate(std::begin(m_wavedata[x].waveData), std::end(m_wavedata[x].waveData), 0.0); float size = m_wavedata[x].SamleRate; double mean = sum/size; for(int j = 0 ; j < m_wavedata[x].SamleRate;j++){ vecData.push_back(m_wavedata[x].waveData.at(j)-mean); } comFun.FFTSpec(vecData,vecFFTSpecData); QVector key,value; for(int j = 0; j < vecFFTSpecData.size();j++){ key.push_back(j); } ui->widget_FsGraph->addGraph(ui->widget_FsGraph->xAxis, ui->widget_FsGraph->yAxis); ui->widget_FsGraph->graph(0)->setData(key, vecFFTSpecData); QPen pen; pen.setColor(m_wavedata.at(0).linColor); pen.setStyle(Qt::SolidLine); ui->widget_FsGraph->graph(0)->setPen(pen); ui->widget_FsGraph->rescaleAxes(true); QString stryLabel = m_wavedata[0].sensorType + "(" + m_wavedata[0].sensorEngineeringUnit +")"; ui->widget_FsGraph->yAxis->setLabel( stryLabel); ui->widget_FsGraph->setSelectionRectMode(QCP::SelectionRectMode::srmNone); ui->widget_FsGraph->setInteractions(QCP::iRangeZoom|QCP::iRangeDrag); QVector::iterator max = std::max_element(std::begin(value), std::end(value)); QVector::iterator min = std::min_element(std::begin(value), std::end(value)); double biggest = *max; double minimum = *min; ui->widget_FsGraph->yAxis->setRange(minimum-1,biggest+2); ui->widget_FsGraph->graph(0)->rescaleValueAxis(false,true); ui->widget_FsGraph->axisRect()->setRangeZoomFactor(1.2,1); ui->widget_FsGraph->axisRect()->setRangeZoomAxes(ui->widget_FsGraph->xAxis,ui->widget_FsGraph->yAxis); ui->widget_FsGraph->replot(); } void CDataGraphView::ReadDatFile(QString strFileName){ QFile file(strFileName); if (!file.open(QIODevice::ReadOnly)) { qDebug() << "::MainWidget::ReadDatData() cannot open file for read"; return; } QProgressDialog *progressDialog = new QProgressDialog(this); progressDialog->setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint); progressDialog->setWindowModality(Qt::WindowModal); progressDialog->setWindowTitle(tr("Please Wait")); progressDialog->setLabelText(tr("数据读取中...")); progressDialog->setCancelButton(0); progressDialog->show(); QString m_sEquipNo; //设备号 QString m_strDeviceName; //设备名称 QString m_strCollectTime; //采集时间 QTime startTime = QTime::currentTime(); // qDebug() << "Vector 的 容量为1" << m_vecPushData.capacity() << endl; qDebug() << "m_vecAllData 的 容量为2" << m_vecAllData.capacity() << endl; m_vecGroupdata.clear(); m_vecWaveInfo.clear(); QVector().swap(m_vecGroupdata); QVector().swap(m_vecWaveInfo); QVector().swap(m_vecAllData); QMap>::Iterator iter1 = mapWaveData.begin(); for(iter1 = mapWaveData.begin();iter1 !=mapWaveData.end();iter1++){ QVector().swap(iter1.value()); mapWaveData.erase(iter1); } qDebug() << "m_vecAllData 的 容量为2" << m_vecAllData.capacity() << endl; int theSize = 0; //通道数 //读12字节头文件 int iJsonSize, iChannelsize; char equipNo[12]; //设备No 12字节 char time[10]; //数据起始时间 10字节 file.read((char*)&iChannelsize, sizeof(iChannelsize)); qDebug() << "::MainWidget::ReadDatData() Channelsize:" << iChannelsize; int iCount; //存储dat文件原始数据秒数 file.read((char*)&iCount, sizeof(iCount)); qDebug() << "::MainWidget::ReadDatData() iCount:" << iCount; file.read(equipNo, sizeof(equipNo)); QString sEquipNo(equipNo); m_sEquipNo = sEquipNo.left(12); qDebug() << "::MainWidget::ReadDatData() equipNo:" << m_sEquipNo; file.read(time, sizeof(time)); QString CollectTime(time); m_strCollectTime = CollectTime.left(10); qDebug() << "::MainWidget::ReadDatData() time:" << m_strCollectTime; file.read((char *)&iJsonSize, sizeof(iJsonSize)); qDebug() << "::MainWidget::ReadDatData() iJsonSize:" << iJsonSize; //读json串 char *buf0 = (char *)malloc(sizeof(char) *iJsonSize); file.read(buf0,iJsonSize); QJsonParseError parseJsonErr; QJsonDocument document = QJsonDocument::fromJson(buf0,&parseJsonErr); if(!(parseJsonErr.error == QJsonParseError::NoError)) { qDebug()< pData; int j = 0; int temCount = 0; int flag = -1; progressDialog->setRange(0, iCount * channels-1); while (!file.atEnd()) { file.read((char *)&Count, sizeof(Count)); //qDebug()<<"Count" << Count << "temCount" < temCount && flag == 0)//过滤超出的秒数的数据 break; if(Count == temCount && flag == 0) flag = 1; if(Count < temCount || flag == 1){//过滤原始数据中转速多余数据 file.read(buf, sizeof(buf)); file.read((char *)&waveSize, sizeof(waveSize)); float f = 0.0; QVector vecSpeed; qDebug()<<"waveSize1" < 131072){ qDebug() << "waveSize2" << waveSize << endl; //delete progressDialog; file.close(); QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("Dat文件不符合规范!")); return; } for (int i = 0; i < waveSize; i++) { file.read((char *)&f, sizeof(f)); m_WaveChnData[j].channelId = buf; m_WaveChnData[j].waveData.push_back((double)f); m_WaveChnData[j].Second = Count; } temCount = Count; //qDebug()<<"::MainWidget::ReadDatData() wave.channelId" << m_WaveChnData[j].channelId<<" wave.count"<setValue(j); if (progressDialog->wasCanceled()) { delete progressDialog; file.close(); return ; } j++; } //qDebug()<::iterator iter = m_vecWaveInfo.begin(); int linecolor = 0; for (;iter != m_vecWaveInfo.end() ; iter++ ) { WAVE_DATA wave; int ii = 0; QVector m_vecPushData1; for(int i = 0; i < j; i++){ //qDebug() << "i" << iter->channelId.left(bufferSiz) << "j " << m_WaveChnData[i].channelId.left(bufferSiz) <channelId.left(bufferSiz) == m_WaveChnData[i].channelId.left(bufferSiz)){ wave.waveData = m_WaveChnData[i].waveData; double sum = 0.0; if(iter->sensorType == "ACCELEROMETER" || iter->sensorType == "MICROPHONE" || iter->sensorType == "PROXIMETER" || iter->sensorType == "VELOCITY" || iter->sensorType == "TACHOMETER" || iter->sensorType == "THRUST" || iter->sensorType == "FAST_VOLTAGE"){ sum = std::accumulate(std::begin(wave.waveData), std::end(wave.waveData), 0.0); double size = m_WaveChnData[i].waveData.size(); wave.mean = sum/size; }else{ sum = 0.0; } if(iter->sensorType == "TACHOMETER"){ wave.TimeStamp = m_WaveChnData[i].TimeStamp; //qDebug()<< "iCount" <SpeedProfileSpeed; wave.wavesize = wave.waveData.size(); wave.SamleRate = iter->channelSamleRate; wave.sensorType = iter->sensorType; wave.channelId = iter->channelId; wave.channelNo = theSize; wave.Time = iCount; wave.channelName = iter->channelName; wave.pairChannelID = iter->pairChannelID; wave.sensorEngineeringUnit = iter->sensorEngineeringUnit; wave.speedRefChannelId = iter->speedRefChannelId; wave.RMSValue = iter->RMSValue; wave.iTrigger = iter->iTrigger; wave.iKeyCount = iter->iKeyCount; wave.iTriggerValue = iter->iTriggerValue; wave.iHysteresis = iter->iHysteresis; wave.tachAutoTach = iter->tachAutoTach; wave.sensorGapVoltage = iter->sensorGapVoltage; wave.sensorSensitivity = iter->sensorSensitivity; switch(linecolor){ case 0: wave.linColor = Qt::green ; break; case 1: wave.linColor = QColor(30,144,255) ; break; case 2: wave.linColor = QColor(255,182,193) ; break; case 3: wave.linColor = Qt::cyan ; break; case 4: wave.linColor = Qt::magenta ; break; case 5: wave.linColor = Qt::yellow ; break; case 6: wave.linColor = QColor(255,69,0) ; break; case 7: wave.linColor = QColor(0, 255, 127) ; break; case 8: wave.linColor = QColor(255,140,0) ; break; case 9: wave.linColor = QColor(0, 191, 255) ; break; case 10: wave.linColor = Qt::darkMagenta ; break; case 11: wave.linColor = Qt::lightGray ; break; case 12: wave.linColor = Qt::darkYellow ; break; case 13: wave.linColor = QColor(153, 51, 250); break; case 14: wave.linColor = QColor(255, 218, 185) ; break; case 15: wave.linColor = QColor(0,199,140) ; break; default: break; } m_vecPushData1.push_back(wave); } } linecolor++; if(linecolor > 15){ linecolor = 0; } qDebug() << "channelId"<channelId << endl; mapWaveData.insert(iter->channelId,m_vecPushData1); m_iRealCount = m_vecPushData1.size(); qDebug() << "m_iRealCount"<>::Iterator iter2 = mapWaveData.begin(); for (; iter2 != mapWaveData.end(); iter2 ++) { if(!strIDList.contains(iter2.key())) strIDList.push_back(iter2.key()); strChannleType.push_back(iter2.value()[0].sensorType); strChannleNameList.push_back(iter2.value()[0].channelName); } qDebug() << "End1 " <