您当前的位置: 首页 >  qt

wendy_ya

暂无认证

  • 2浏览

    0关注

    342博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

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

wendy_ya 发布时间:2021-09-10 10:02:08 ,浏览量:2

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

一、代码示例 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 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();
}
二、运行结果

在这里插入图片描述

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

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

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

关注
打赏
1659256378
查看更多评论
立即登录/注册

微信扫码登录

0.0375s