在网上查了这方面的内容,几乎清一色的都是主要用QCPItemTracer和QCPItemText这两个类实现的,实现代码冗长,现在的我还没有搞懂。最后,发现通过QToolTip实现该功能是个挺简便的方法,能实现一个函数就搞定了,保证了代码的轻量级,随拿随用,下面就给出代码实现(qt 5.13 +vs2017+ C++)。
(1)首先建立一个鼠标移动时间响应函数:

private slots:void myMouseMoveEvent(QMouseEvent *event);

(2)将槽函数myMouseMoveEvent与QCustomPlot的mouseMove信号建立连接。
Plus,这里推荐基于qt5的信号槽连接,因为编译时,基于qt4的connect不会检查信号和槽的参数以及槽函数正确与否,而基于qt5的connect会有这一个检查过程(原来遇见过基于qt4的槽函数没有响应的情况)。

connect(ui.customPlot, &QCustomPlot::mouseMove, this, &AnalysisWidget::myMouseMoveEvent);

(3)槽函数实现光标划过曲线显示点坐标功能。
代码有详细注释,这里就不详细讲解。

void AnalysisWidget::myMouseMoveEvent(QMouseEvent *event)
{if (ui.customPlot->graphCount() == 0)return;//获取鼠标坐标,相对父窗体坐标int x_pos = event->pos().x();int y_pos = event->pos().y();//鼠标坐标转化为CustomPlot内部坐标float x_val = ui.customPlot->xAxis->pixelToCoord(x_pos);float y_val = ui.customPlot->yAxis->pixelToCoord(y_pos);//通过坐标轴范围判断光标是否在点附近float x_begin = ui.customPlot->xAxis->range().lower;float x_end = ui.customPlot->xAxis->range().upper;float y_begin = ui.customPlot->yAxis->range().lower;float y_end = ui.customPlot->yAxis->range().upper;float x_tolerate = (x_end - x_begin) / 40;//光标与最近点距离在此范围内,便显示该最近点的值float y_tolerate = (y_end - y_begin) / 40;//判断有没有超出坐标轴范围if (x_val < x_begin || x_val > x_end)return;//通过x值查找离曲线最近的一个key值索引int index = 0;int index_left = ui.customPlot->graph(0)->findBegin(x_val, true);//左边最近的一个key值索引int index_right = ui.customPlot->graph(0)->findEnd(x_val, true);//右边float dif_left = abs(ui.customPlot->graph(0)->data()->at(index_left)->key - x_val);float dif_right = abs(ui.customPlot->graph(0)->data()->at(index_right)->key - x_val);if (dif_left < dif_right)index = index_left;elseindex = index_right;x_val = ui.customPlot->graph(0)->data()->at(index)->key;//通过得到的索引获取key值int graphIndex=0;//curve index closest to the cursor    float dx = abs(x_val - ui.customPlot->xAxis->pixelToCoord(x_pos));float dy= abs(ui.customPlot->graph(0)->data()->at(index)->value - y_val);//通过遍历每条曲线在index处的value值,得到离光标点最近的value及对应曲线索引for (int i = 0; i < ui.customPlot->xAxis->graphs().count(); i++){   if (abs(ui.customPlot->graph(i)->data()->at(index)->value - y_val)<dy){dy = abs(ui.customPlot->graph(i)->data()->at(index)->value - y_val);graphIndex = i;}        }QString strToolTip = "测量点" + QString::number(graphIndex + 1) + ": (";strToolTip += QString::number(x_val, 10, 4) + ", ";strToolTip += QString::number(ui.customPlot->graph(graphIndex)->data()->at(index)->value) + ")";//判断光标点与最近点的距离是否在设定范围内if (dy < y_tolerate && dx < x_tolerate)QToolTip::showText(cursor().pos(), strToolTip, ui.customPlot);
}

效果:

QCustomPlot之光标划过曲线显示点的坐标相关推荐

  1. qt之QCustomPlot动态时间轴更新曲线

    一.前言 使用qcustomplot进阶用法, 横坐标采用时间显示,纵坐标为数值当前值,主要实现的是横坐标点和时间对应,但不全部显示时间,只显示设定数量时间点,例如:曲线x长度10000,设置时间点7 ...

  2. STM32连续采样_STM32 - 利用双缓冲实现实时曲线显示(续)

    前言 大概半个月之前捣鼓了下利用STM32实现实时曲线显示,中间又做了一点小改进和扩充,在这里更新一下: 利用DMA进行缓冲区到LCD GRAM的像素数据搬运 效果更好的曲线绘制策略 代码可以在这里找 ...

  3. chart控件做实时曲线显示_组态王实时趋势曲线控件介绍,让你对此不再陌生

    一.组态王实时趋势控件的特点 1. 通过TCPIP获得实时数据,数据服务器可以是任何一台运行组态王的机器,而不需进行组态王网络配置. 2. 最多可以显示20条曲线. 3. 可以设置每条曲线的绘制方式, ...

  4. qt中使用qwt实现实时曲线显示

    最近做一个飞控的上位机,需要实时在一个图中显示多条曲线,并且这些曲线还可以在任何时刻隐藏和显示.于是借鉴qgc地面站中显示mavlink消息的曲线显示方法,用qwt实现了这一功能. 最终效果 可以设置 ...

  5. 迪文屏幕动态曲线显示问题记录

    本人在使用迪文组态屏时发现一个问题.在需要动态曲线显示时,所有的配置都正确,就是显示的波形有乱码,不是规整的正弦波.使用的是DMG80480C070_03WTR,波特率19200.今年5月购买的屏幕就 ...

  6. VS上位机开发——曲线显示

    VS上位机开发--曲线显示 目录 VS上位机开发--曲线显示 一.新建项目 二.添加ZedGraph控件 1.下载ZedGraph 2.安装ZedGraph 三.添加控件并编写代码 四.程序打包 五. ...

  7. X-Analyser 总线分析软件:CANopen、1939解析、UDS诊断、NMEA2000 协议解析、DBC文件解析、仿真工具、CAN报文分析、仿CANoe曲线显示 CAN仪表模拟器

    X-Analyser 总线分析软件主要用于:CANopen协议解析.J1939解析 J1939地址ISO15765(UDS诊断) .NMEA2000 协议解析.DBC文件解析 DBC仿真工具.CANo ...

  8. 前端基于VUE的v-charts的曲线显示

    目录 前端基于VUE的v-charts的曲线显示 1. 应用背景 2. 分析数据生产者生成 3. 取出数据消费者 4. 前端显示 4.1 安装V-charts插件 4.2 引入veline曲线插件 4 ...

  9. 识别图片中曲线并获取其坐标

    识别图片中曲线并获取其坐标 github主页:https://github.com/Taot-chen 有时候需要用到一些数据库里面曲线图的数据,进行进一步的变换处理,但是很多时候都只有图片,没有数据 ...

  10. 关于windows程序显示鼠标所在坐标

    最近在学习windows程序设计,当遇到需要显示鼠标所在坐标时,因为教材都是讲vc6.0的,而在自己的vs上总出现问题. 总体思路时将坐标转换成字符串,再将字符串用TextOutW()输出. 其中一个 ...

最新文章

  1. oracle sql 分区查询语句_oracle11g 表分区后的查询语句如何知道是否进行了全表扫描...
  2. echo回声不能用了_回声消除的昨天、今天和明天
  3. MySQL查询出来的不重复
  4. Java开发笔记(二十三)数组工具Arrays
  5. linux下DNS服务器的搭建
  6. Iterables和迭代器
  7. BPSK调制在AWGN信道下,卷积码
  8. 团队管理35-管理方法论积累
  9. Android手机下载liuns系统的Ubuntu教程
  10. px4 Linux下环境的配置 gcc-arm装不上 OpenGL=3.1 问题
  11. WPS2019 装完图片默认打开方式改了, 改成了 WPS 打开
  12. 20162327WJH第二次实验——树
  13. 77个数据科学家常见面试题
  14. 关于Excel中的自定义格式
  15. 老司机手把手教php,老司机手把手教你玩驱魔!纯小白无脑驱魔攻略
  16. 监听器-Listener
  17. 一、简单工厂模式(simple factory method)
  18. RabbitMQ学习笔记:内存(Memory)|磁盘空间(Disk space)阀值
  19. Nginx的access.log日志分析工具-goaccess
  20. deep_learning_初学neural network

热门文章

  1. 终于明白为什么人人都爱Django了,Django果然天下第一
  2. VMware16阿里云盘
  3. [Linux] 使用 Wine
  4. 泽林主办前沿IT技术分享峰会隆重召开,深度探讨人工智能、大数据与物联网 的未来发展趋势
  5. 2021-08-26小白笔记2
  6. 京东返利PHP采集关键字,PHP实现京东API的授权HASH算法
  7. eda交通灯控制器波形输入_EDA 基于quartus平台制作的步行街自助式交通灯控制器(含vhdl程序、波形图、及电路原理图)+课程设计报告...
  8. 制作u盘winpe启动盘_制作U盘启动盘
  9. 浅谈对二分查找最大次数的理解
  10. 基于层次分析法(AHP)的信贷案例详解