自定義QCustomplot實現多條曲線查看某一條曲線上的點


當QCustomplot上有兩條以上的曲線,怎么實現點擊某一條曲線就查看這條曲線上的點呢?

效果如圖:

可以分成兩步解決

首先是要能查看一條曲線的點,這個qcustomplot有專門的一個QCPItemTracer類來實現。

鼠標移動實現只需重寫mouseMoveEvent事件即可,

 

然后是要實現多條曲線選中某一條,QCustomplot也給出了實現方法:

setInteractions(QCP::iSelectPlottables);//設置曲線可選

在鼠標移動事件中加入曲線選擇判斷條件,並通過setGraph函數將錨點和曲線連接起來即可。

頭文件:

protected:
    virtual void mouseMoveEvent(QMouseEvent *event);
private:
QCPItemTracer *tracer;

構造函數中:

tracer = new QCPItemTracer(this);  
tracer
->setInterpolating(false);
tracer
->setStyle(QCPItemTracer::tsCircle);
tracer
->setPen(QPen(Qt::red));
tracer
->setBrush(Qt::red);
tracer
->setSize(6);

setInteractions(QCP::iSelectPlottables);

mouseMoveEvent事件中:

QCPGraph *mGraph = graph(0);
//得到錨點的像素坐標
QPointF temp = tracer->position->coords();
//將像素點轉換成qcustomplot中的坐標值,並通過setGraphKey將錨點值設為真實數據值。
tracer->setGraphKey(xAxis->pixelToCoord(event->pos().x())); //遍歷曲線 for (int i = 0; i < graphCount(); ++i) { //判斷哪一條曲線被選中 if(graph(i)->selected()) { //顯示錨點 tracer->setVisible(true); mGraph = graph(i); //顯示tip框 QToolTip::showText(event->globalPos(), tr( "<h4>%L1</h4>" "<table>" "<tr>" "<td><h5>X: %L2</h5></td>" "<td> , </td>" "<td><h5>Y: %L3</h5></td>" "</tr>" "</table>").arg(mGraph->name()).arg( QString::number( temp.x(), 'g' ) ).arg( QString::number( temp.y(), 'g' ) ), this, this->rect()); break; } else { //沒有曲線被選中,不顯示錨點 tracer->setVisible(false); }
}
//將錨點設置到被選中的曲線上 tracer->setGraph(mGraph); //重繪 replot();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM