| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127 |
- #include "MCustomPlot.h"
- MCustomPlot::MCustomPlot(QWidget *parent)
- :QCustomPlot(parent)
- ,m_isShowTracer(false)
- ,m_xTracer(Q_NULLPTR)
- ,m_yTracer(Q_NULLPTR)
- // ,m_dataTracers(QList<MTracer *>())
- ,m_lineTracer(Q_NULLPTR)
- {
- }
- void MCustomPlot::mouseMoveEvent(QMouseEvent *event)
- {
- QCustomPlot::mouseMoveEvent(event);
- if(m_isShowTracer)
- {
- //当前鼠标位置(像素坐标)
- int x_pos = event->pos().x();
- int y_pos = event->pos().y();
- //像素坐标转成实际的x,y轴的坐标
- float x_val = this->xAxis->pixelToCoord(x_pos);
- float y_val = this->yAxis->pixelToCoord(y_pos);
- if(Q_NULLPTR == m_xTracer)
- m_xTracer = new MTracer(this, MTracer::XAxisTracer);//x轴
- m_xTracer->updatePosition(x_val, y_val);
- if(Q_NULLPTR == m_yTracer)
- m_yTracer = new MTracer(this, MTracer::YAxisTracer);//y轴
- m_yTracer->updatePosition(x_val, y_val);
- if(Q_NULLPTR == m_lineTracer)
- m_lineTracer = new MTraceLine(this,MTraceLine::Both);//直线
- m_lineTracer->updatePosition(x_val, y_val);
- int nCurveCount = this->plottableCount();
- /*
- for (int i = 0; i< nCurveCount; ++i)
- {
- MTracer *tracer = new MTracer(this, MTracer::DataTracer);
- tracer->setVisible(true);
- tracer->setPen(this->plottable(i)->pen());
- tracer->setBrush(Qt::NoBrush);
- if(this->plottable(i)->name() != "" && this->plottable(i)->name() != "")
- {
- QCPGraph * pgraph = (QCPGraph *) this->plottable(i);
- QCPPlottableLegendItem * item = this->legend->itemWithPlottable(pgraph);
- MTracer *tracer = new MTracer(this, MTracer::DataTracer);
- tracer->setVisible(true);
- tracer->setPen(this->plottable(i)->pen());
- tracer->setBrush(Qt::NoBrush);
- tracer->m_tracer->setGraph(pgraph);
- tracer->m_tracer->setGraphKey(x_val);
- tracer->m_tracer->setInterpolating(false);
- tracer->setLabelPen(this->plottable(i)->pen());
- auto iter = this->plottable(i)->interface1D()->findBegin(x_val);
- auto yiter = this->plottable(i)->interface1D()->dataMainValue(iter);
- auto xiter = this->plottable(i)->interface1D()->dataMainKey(iter);
- tracer->updatePosition(x_val, y_val);
- tracer->m_label->setText(QString("x:%1,y:%2,t:%3,k:%4,v:%5").arg(x_val).arg(y_val).arg(iter).arg(xiter).arg(yiter));
- if(item->selected() || pgraph->selected())
- {
- item->setSelected(true);
- QPen pen;
- pen.setWidth(10);
- pen.setColor(Qt::blue);
- pgraph->selectionDecorator()->setPen(pen);
- qDebug()<<QString("selected");
- pgraph->setSelection(QCPDataSelection(pgraph->data()->dataRange()));
- }
- tracer->deleteLater();
- }else if(0){
- //显示curve曲线
- //获取实部y轴的显示范围
- // double y_range = (this->yAxis->range().size()) / 50;
- // double x_range = (this->xAxis->range().size()) / 50;
- int pointCount = this->plottable(i)->interface1D()->dataCount(); //曲线上所有数据点个数
- if(pointCount)
- {
- double x,y;
- double xNearlest = 999;
- double yNearlest = 999;
- double xDistance;
- double yDistance;
- double xTmp = 999;
- double yTmp = 999;
- int t_index;
- for(int j =0; j < pointCount; j++)
- {
- double nearindex = this->plottable(i)->interface1D()->findBegin(j);
- double x_line = this->plottable(i)->interface1D()->dataMainKey(nearindex);
- double y_line = this->plottable(i)->interface1D()->dataMainValue(nearindex);
- xDistance = abs(x_val - x_line);
- yDistance = abs(y_val - y_line);
- if( xDistance <= xTmp && yDistance <= yTmp)
- {
- t_index = nearindex;
- xTmp = xDistance;
- yTmp = yDistance;
- xNearlest = x_line;
- yNearlest = y_line;
- }
- }
- MTracer *tracer = new MTracer(this, MTracer::DataTracer);
- tracer->setVisible(true);
- tracer->setPen(this->plottable(i)->pen());
- tracer->setBrush(Qt::NoBrush);
- tracer->updatePosition(xNearlest, yNearlest);
- tracer->deleteLater();
- }
- }
- }
- */
- this->replot();//曲线重绘
- }
- }
|