QCustomPlot基础教程(七)——Qt设置鼠标跟随动态显示曲线上的点的值(多条曲线)

目录

    • 一、代码示例
      • 1.1 绘制两条曲线
      • 1.2 mainwindow.h头文件
      • 1.3 mainwindow.cpp源文件
      • 1.4 重写mouseMoveEvent事件函数
    • 二、运行结果

一、代码示例

1.1 绘制两条曲线

利用QCustomPlot绘制曲线的代码就不过多介绍了,详情可参考:QCustomPlot基础教程(二)——在Qt中绘制多个曲线。
曲线绘制结果如下:
QCustomPlot基础教程(七)——Qt设置鼠标跟随动态显示曲线上的点的值(多条曲线)_第1张图片

1.2 mainwindow.h头文件

包含一个槽函数,声明两个变量:

public slots:
    void mouseMoveEvent(QMouseEvent *event);
private:
    QCPItemTracer *tracer;
    QCustomPlot *customPlot;

1.3 mainwindow.cpp源文件

生成游标代码如下:

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

最后,再加入信号-槽连接语句:

//信号-槽连接语句
       connect(customPlot, SIGNAL(mouseMove(QMouseEvent*)), this, SLOT(mouseMoveEvent(QMouseEvent*)));

1.4 重写mouseMoveEvent事件函数

函数代码如下:


void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
    QCPGraph *mGraph = customPlot->graph(0);
    //将像素点转换成qcustomplot中的坐标值,并通过setGraphKey将锚点值设为真实数据值。tracer->setGraphKey(xAxis->pixelToCoord(event->pos().x()));
    int graphCount=2;
    //获得鼠标位置处对应的横坐标数据x
    double x = customPlot->xAxis->pixelToCoord(event->pos().x());
    //遍历曲线
    for (int i = 0; i < graphCount; ++i)
    {
        //判断哪一条曲线被选中
        if(customPlot->graph(i)->selected())
        {
            //显示锚点
            tracer->setVisible(true);
            mGraph = customPlot->graph(i);

            tracer->setGraph(mGraph);//将锚点设置到被选中的曲线上
            tracer->setGraphKey(x); //将游标横坐标设置成刚获得的横坐标数据x
            tracer->setInterpolating(true); //游标的纵坐标可以通过曲线数据线性插值自动获得
            tracer->updatePosition(); //使得刚设置游标的横纵坐标位置生效
            double xValue = tracer->position->key();
            double yValue = tracer->position->value();
            //显示tip框
            QToolTip::showText(event->globalPos(), tr(
                                   "

%1

"
"""""""""""""
X: %2
,
Y: %3
"
).arg(mGraph->name()).arg( QString::number(xValue)).arg(QString::number(yValue)), this, this->rect()); break; } else { //没有曲线被选中,不显示锚点 tracer->setVisible(false); }} //重绘 customPlot->replot(); }

二、运行结果

QCustomPlot基础教程(七)——Qt设置鼠标跟随动态显示曲线上的点的值(多条曲线)_第2张图片

完整代码可以参考:https://download.csdn.net/download/didi_ya/22331471

参考文章:https://www.cnblogs.com/coldheartx/p/13750363.html

ok,以上便是全部内容了,如果对你有所帮助,记得点个赞哟~

你可能感兴趣的:(Qt,qt)