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

本文详细介绍了如何使用Qt库的QCustomPlot绘制两条曲线,并着重展示了如何通过mouseMoveEvent事件重写功能,实现实时游标追踪并显示数据点信息。通过实例代码和运行结果,读者将学会在Qt应用中动态跟踪鼠标操作并更新图表显示。
摘要由CSDN通过智能技术生成

一、代码示例

1.1 绘制两条曲线

利用QCustomPlot绘制曲线的代码就不过多介绍了,详情可参考:QCustomPlot基础教程(二)——在Qt中绘制多个曲线
曲线绘制结果如下:
在这里插入图片描述

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(
                                   "<h4>%1</h4>"
                                   "<table>"
                                   "<tr>"
                                   "<td><h5>X: %2</h5></td>" "<td>  ,  </td>" "<td><h5>Y: %3</h5></td>"
                                   "</tr>"
                                   "</table>").arg(mGraph->name()).arg( QString::number(xValue)).arg(QString::number(yValue)), this, this->rect());
            break;
        }
        else
        {
            //没有曲线被选中,不显示锚点
            tracer->setVisible(false);
        }}
    //重绘
    customPlot->replot();
}

二、运行结果

在这里插入图片描述

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

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

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

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wendy_ya

您的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值