#include "WaveDisplay.h" #include "ui_WaveDisplay.h" #include "NetMgr.h" #include #include CWaveDisPlay::CWaveDisPlay(QWidget *parent) : QWidget(parent), ui(new Ui::CWaveDisPlay) { ui->setupUi(this); m_ChannelID = ""; m_PackgNum = 1; bFlag = false; m_Times = 0; ui->widget->setProperty("flag", "Title"); ui->widget_4->setProperty("flag", "normal"); // QAbstractItemView* view = ui->comboBox_channel_2->view(); // QGraphicsDropShadowEffect* effect = new QGraphicsDropShadowEffect; // effect->setBlurRadius(6); // effect->setColor(Qt::black); // effect->setOffset(0, 0); // view->setGraphicsEffect(effect); // view->update(); // static_cast(view->parent()) // ->setStyleSheet( // "QWidget{border:none;background-color: rgb(255, 255, 255);}"); // QWidget* container = static_cast(view->parent()); // container->setAttribute(Qt::WA_TranslucentBackground); // container->setWindowFlag(Qt::FramelessWindowHint); // container->setWindowFlag(Qt::NoDropShadowWindowHint); InitWindows(); } CWaveDisPlay::~CWaveDisPlay() { delete ui; } void CWaveDisPlay::InitWindows() { ui->comboBox_channel_2->addItem("请选择通道..."); for (int i = 0; i < g_ChannelBaseInfo.size(); i++) { ui->comboBox_channel_2->addItem(g_ChannelBaseInfo[i].channelName); } ui->comboBox_channel_2->setView(new QListView()); ui->comboBox_channel_2->setCurrentText("请选择通道..."); m_pNetMgr = new NetMgr(this); ui->Btn_Timewave->setStyleSheet(" QPushButton{ border-image:url(:/image/Btn/timewave.png) 5; }\ QPushButton:hover{ border-image:url(:/image/Btn/timewave-p.png) 5; }\ QPushButton:pressed{border-image:url(:/image/Btn/timewave-p.png) 5; }\ QPushButton:checked{border-image:url(:/image/Btn/timewave-p.png) 5; } " ); ui->Btn_Timewave->setChecked(true); ui->pushButton_1S->setStyleSheet(" QPushButton{ border-image:url(:/image/Btn/normal_Btn.png); color:#1f5188 }\ QPushButton:hover{ border-image:url(:/image/Btn/normal_Btn_p.png); color:#ffffff }\ QPushButton:pressed{border-image:url(:/image/Btn/normal_Btn_p.png); color:#ffffff }\ QPushButton:checked{border-image:url(:/image/Btn/normal_Btn_p.png); color:#ffffff } " ); ui->pushButton_1S->setChecked(true); //绑定HTTP消息响应 connect(m_pNetMgr,SIGNAL(sigNetMgr(QString, const QVariant&)), this, SLOT(slotNetMgr(QString,const QVariant&))); on_comboBox_channel_2_currentTextChanged(""); tracer = new QCPItemTracer(ui->widget_wave); 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_wave); 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(""); Cursor(); } void CWaveDisPlay::on_Btn_Hand_clicked() { ui->widget_wave->setSelectionRectMode(QCP::SelectionRectMode::srmNone); if(ui->Btn_Hand->isChecked()){ //交互设置 ui->widget_wave->setInteractions(QCP::iRangeDrag | QCP::iSelectAxes | QCP::iSelectLegend | QCP::iMultiSelect); }else if(!ui->Btn_Hand->isChecked()){ ui->widget_wave->setInteractions(QCP::iNone); } } void CWaveDisPlay::on_Btn_Zoom_clicked() { ui->widget_wave->setSelectionRectMode(QCP::SelectionRectMode::srmZoom); ui->widget_wave->selectionRect()->setPen(QPen(Qt::black,1,Qt::DashLine));//虚线 ui->widget_wave->selectionRect()->setBrush(QBrush(QColor(255, 222, 173,50)));//NavajoWhite } void CWaveDisPlay::on_Btn_Scales_clicked() { ui->widget_wave->setSelectionRectMode(QCP::SelectionRectMode::srmNone); ui->widget_wave->rescaleAxes(true); ui->widget_wave->replot(); } void CWaveDisPlay::on_comboBox_channel_currentTextChanged(const QString &arg1) { } void CWaveDisPlay::ParseDataTimeWave(QJsonObject & objContent) { int packageMax = objContent["packageMax"].toInt(); int package = objContent["package"].toInt(); if(packageMax > 1 && m_PackgNum < packageMax /*&& package + 1 <= packageMax*/ && !bFlag ){ QJsonObject allObj,cmdBody; allObj.insert("cmd", "30"); cmdBody.insert("package",m_PackgNum); cmdBody.insert("channelId",m_ChannelID); allObj["cmdBody"] = cmdBody; QNetworkRequest req; QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP); req.setUrl(sUrl); m_pNetMgr->PostJson(req,allObj); m_PackgNum += 1; } QString data = objContent["Data"].toString(); m_WaveData = m_WaveData + data + ","; if(package + 1 == packageMax){ qDebug() << "package" <widget_wave->xAxis->setRange(0, 1); ui->widget_wave->xAxis->setLabel("Time(s)"); double gap = (double)1/(double)m_ListWaveData.size(); double f = 0.0; QVector x,y; QCPGraph* graph = ui->widget_wave->addGraph(ui->widget_wave->xAxis, ui->widget_wave->yAxis); for(int i = 0; i < m_ListWaveData.size();i++){ f += gap; x.push_back(f); y.push_back(m_ListWaveData[i].toDouble()); } qDebug() << "x" <setData(x,y); ui->widget_wave->xAxis->setRange(0, 1); on_Btn_Scales_clicked(); ui->widget_wave->replot(); } } void CWaveDisPlay::ParseDataFsWave(QJsonObject & objContent) { int packageMax = objContent["packageMax"].toInt(); int package = objContent["package"].toInt(); if(packageMax > 1 && m_PackgNum < packageMax && package + 1 <= packageMax && !bFlag ){ QJsonObject allObj,cmdBody; allObj.insert("cmd", "32"); cmdBody.insert("package",m_PackgNum); cmdBody.insert("channelId",m_ChannelID); allObj["cmdBody"] = cmdBody; QNetworkRequest req; QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP); req.setUrl(sUrl); m_pNetMgr->PostJson(req,allObj); m_PackgNum += 1; } QString data = objContent["Data"].toString(); m_WaveData = m_WaveData + data + ","; if(m_PackgNum == packageMax){ m_PackgNum = 1; bFlag = true; m_ListWaveData = m_WaveData.split(","); //qDebug() << m_ListWaveData << endl; ui->widget_wave->xAxis->setRange(0, 1); ui->widget_wave->xAxis->setLabel("Fs(Hz)"); ui->widget_wave->yAxis->setLabel("Fs(Hz)"); QVector x,y; QCPGraph* graph = ui->widget_wave->addGraph(ui->widget_wave->xAxis, ui->widget_wave->yAxis); for(int i = 0; i < m_ListWaveData.size();i++){ x.push_back(i); y.push_back(m_ListWaveData[i].toDouble()); } qDebug() << "x" <setData(x,y); ui->widget_wave->xAxis->setRange(0, y.size()); on_Btn_Scales_clicked(); ui->widget_wave->replot(); } } void CWaveDisPlay::slotNetMgr(QString sAddr, const QVariant &msg) { QJsonObject objec = msg.value(); if(objec.contains("cmd")) { QJsonValue arrays_value = objec.take("cmd"); qDebug()<<"cmd ="<widget_wave->clearGraphs(); ui->widget_wave->clearPlottables(); ui->widget_wave->replot(); m_WaveData = ""; m_ListWaveData.clear(); } void CWaveDisPlay::on_Btn_Timewave_clicked() { ui->Btn_Fswave->setChecked(false); if(!ui->Btn_Timewave->isChecked()){ InitGraph(); return; } InitGraph(); QJsonObject allObj,cmdBody; allObj.insert("cmd", "30"); cmdBody.insert("package",0); cmdBody.insert("channelId",m_ChannelID); allObj["cmdBody"] = cmdBody; QNetworkRequest req; QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP); req.setUrl(sUrl); m_pNetMgr->PostJson(req,allObj); } void CWaveDisPlay::on_Btn_Fswave_clicked() { ui->Btn_Timewave->setChecked(false); if(!ui->Btn_Fswave->isChecked()){ InitGraph(); return; } InitGraph(); QJsonObject allObj,cmdBody; allObj.insert("cmd", "32"); cmdBody.insert("package",0); cmdBody.insert("channelId",m_ChannelID); allObj["cmdBody"] = cmdBody; QNetworkRequest req; QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP); req.setUrl(sUrl); m_pNetMgr->PostJson(req,allObj); } void CWaveDisPlay::mouseMoveEvent(QMouseEvent *event) { tracer->setVisible(true); tracerLabel->setVisible(true); //将像素点转换成qcustomplot中的坐标值,并通过setGraphKey将锚点值设为真实数据值。tracer->setGraphKey(xAxis->pixelToCoord(event->pos().x())); int graphCount = ui->widget_wave->graphCount(); if(graphCount < 1) return; //获得鼠标位置处对应的横坐标数据x double x = ui->widget_wave->xAxis->pixelToCoord(event->pos().x()); //遍历曲线 for (int i = 0; i < graphCount && tracer->visible(); ++i) { //显示锚点 QCPGraph *mGraph = ui->widget_wave->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_wave->graph(i)->data().data()->findBegin(xValue, true);//true代表向左搜索 } //重绘 ui->widget_wave->replot(); } void CWaveDisPlay::Cursor() { tracer->setVisible(false); tracerLabel->setVisible(false); connect(ui->widget_wave, SIGNAL(mouseMove(QMouseEvent*)), this, SLOT(mouseMoveEvent(QMouseEvent*))); ui->widget_wave->replot(); } void CWaveDisPlay::on_pushButton_refresh_clicked() { on_comboBox_channel_2_currentTextChanged(""); } void CWaveDisPlay::on_comboBox_channel_2_currentTextChanged(const QString &arg1) { m_PackgNum = 1; bFlag = false; ui->widget_wave->clearGraphs(); ui->widget_wave->clearPlottables(); ui->widget_wave->replot(); m_WaveData = ""; m_ListWaveData.clear(); QString strChannelName = ui->comboBox_channel_2->currentText(); if(strChannelName == "请选择通道..."){ return; } int i = 0; for (i = 0; i < g_ChannelBaseInfo.size(); i++) { if(strChannelName == g_ChannelBaseInfo[i].channelName){ break; } } m_ChannelID = g_ChannelBaseInfo[i].channelID; if(ui->Btn_Timewave->isChecked()) { QJsonObject allObj,cmdBody; allObj.insert("cmd", "30"); cmdBody.insert("package",0); cmdBody.insert("channelId",m_ChannelID); allObj["cmdBody"] = cmdBody; QNetworkRequest req; QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP); req.setUrl(sUrl); m_pNetMgr->PostJson(req,allObj); } else if(ui->Btn_Fswave->isChecked()) { QJsonObject allObj,cmdBody; allObj.insert("cmd", "32"); cmdBody.insert("package",0); cmdBody.insert("channelId",m_ChannelID); allObj["cmdBody"] = cmdBody; QNetworkRequest req; QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP); req.setUrl(sUrl); m_pNetMgr->PostJson(req,allObj); } } void CWaveDisPlay::timerEvent(QTimerEvent *ev) { if(ev->timerId() == id1) { QJsonObject allObj,cmdBody; allObj.insert("cmd", "30"); cmdBody.insert("package",0); cmdBody.insert("channelId",m_ChannelID); allObj["cmdBody"] = cmdBody; QNetworkRequest req; QString sUrl = QString("http://%1/cgi-bin/General.cgi/").arg(IP); req.setUrl(sUrl); m_pNetMgr->PostJson(req,allObj); m_Times = m_Times + 1; if(m_Times == 4){ killTimer(id1); m_Times = 0; } } } void CWaveDisPlay::on_pushButton_1S_clicked() { ui->pushButton_4S->setChecked(false); if(!ui->pushButton_1S->isChecked()){ return; } } void CWaveDisPlay::on_pushButton_4S_clicked() { ui->pushButton_1S->setChecked(false); if(ui->pushButton_4S->isChecked()){ id1 = startTimer(1000); //参数1 间隔 单位 毫秒 //定时器第二种方式 QTimer * timer = new QTimer(this); //启动定时器 timer->start(500); return; } }