1.功能说明

上一个blog中(https://www.jianshu.com/p/5f48eaff0088)我已经实现了图像缩放,平移,自动大小及鼠标跟随来显示坐标。今天要实现2条测试线,吸附图像坐标,并且在右下角可以显示坐标差值的功能。

2.效果图

效果图.png

3.gif动图

游标测量.gif

4.关键代码

void MainWindow::mymouseMove(QMouseEvent *event)

{

if(mydrag)

{

double x = ui->widget->xAxis->pixelToCoord(event->pos().x());

double traceX=0;

double traceY=0;

mytrace->setGraph(ui->widget->graph(0));//设置游标吸附在traceGraph这条曲线上

mytrace->setGraphKey(x);//设置游标的X值(这就是游标随动的关键代码)

traceX = mytrace->position->key();

traceY = mytrace->position->value();

if(leftlineSelected)

{

// 将直线吸附到坐标点上

left_line->point1->setCoords(traceX, 0);

left_line->point2->setCoords(traceX, 1);

left_line_posX = traceX;

left_line_posY = traceY;

distX = right_line_posX - left_line_posX;

distY = right_line_posY - left_line_posY;

label->setBrush(QBrush(QColor(199,99,188,80)));

label->setText(tr("X:%1\nY:%2\ndelX:%3s\ndelY:%4M").arg(QString::number(traceX, 'f', 2)).arg(QString::number(traceY, 'f', 2))

.arg(QString::number(distX, 'f', 2)).arg(QString::number(distY, 'f', 2)));

// 重绘

ui->widget->replot();

}

else if(rightlineSelected)

{

// 将直线吸附到坐标点上

right_line->point1->setCoords(traceX, 0);

right_line->point2->setCoords(traceX, 1);

right_line_posX = traceX;

right_line_posY = traceY;

distX = right_line_posX - left_line_posX;

distY = right_line_posY - left_line_posY;

label->setBrush(QBrush(QColor(199,99,23,80)));

// 仅显示2位

label->setText(tr("X:%1\nY:%2\ndelX:%3s\ndelY:%4M").arg(QString::number(traceX, 'f', 2)).arg(QString::number(traceY, 'f', 2))

.arg(QString::number(distX, 'f', 2)).arg(QString::number(distY, 'f', 2)));

// 重绘

ui->widget->replot();

}

else

{

}

}

}

5.总结遇到的问题

如何判断正在拖动。后来网上查了思路通过press和relese来设置标志位,在move中判断标注位即可判断出当前属于鼠标拖动状态。

如何判断选择到了测量线。后来通过看官网的api及直接看源码,使用selectTest来判断当前鼠标按下的点,到测试对象的距离小于5则判断选中了此测量线。另外selectEvent和deselectEvent是虚方法,所以无法使用。

6.残留问题

第一次显示的delta不正确,原因是有一根线没有移动过。解决方法我也有了。初始化的时候2根线应该放到图像坐标的极限位置。另外一种解决方法是判断若为第一次拖动(及坐标变量未赋值时)则不显示delta差即可。

之后我还会做个完整版及多条图像同时处理的版本,到时候一起解决。先记录下。

qcustomplot 游标吸附_qcustomplot游标测量功能--Apple的学习笔记相关推荐

  1. linux的can通信busoff,socketCAN内核源码分析是否支持busoff自恢复--Apple的学习笔记

    大总结:诊断小系统搭建步骤总结--Apple的学习笔记的剩余问题2中,我说过要深入下socketCAN内核源码学习.因为这个小项目关于驱动开发太顺利了,导致学习不到什么东东.最主要我一开始走了捷径,看 ...

  2. linux 应用层gpio中断_linux下GPIO中断驱动US100传感器--Apple的学习笔记

    一,前言 资源就的利用起来.linux下串口raw驱动(US100超声波)--Apple的学习笔记已经用US100玩了串口,US100还可以用GPIO和中断来玩.原理就是triq发送大于10us的高电 ...

  3. 从零写一个具有IOC-AOP-MVC功能的框架---学习笔记---11. MVC功能之http请求处理器的编写---简易框架最后一公里!

    从零写一个具有IOC-AOP-MVC功能的框架-学习笔记 专栏往期文章链接: IOC功能相关章节: 从零写一个具有IOC-AOP-MVC功能的框架-学习笔记-01.项目初始化 从零写一个具有IOC-A ...

  4. 抽象类实例化 使用原功能 c++_java 学习笔记 day08 final/static关键字、抽象类和接口...

    1.final关键字 final修饰类:此类不能被继承 final修饰变量:则变量不能被修改,是常量 final修饰方法:父类的方法被final修饰时,不能被重写 2.static关键字 2.1被st ...

  5. 【使用Redis分布式锁实现优惠券秒杀功能】-Redis学习笔记05

    前言 本章节主要实现限时.限量优惠券秒杀功能,并利用分布式锁解决<超卖问题>.<一人一单问题>. 一.优惠券下单基本功能实现 1.功能介绍及流程图 2.代码实现 @Resour ...

  6. 传感器技术—电容式传感器的测量转换电路(学习笔记七 补充)

    5.2 电容式传感器的测量转换电路 5.2.1 电桥电路 5.2.2 调频电路 5.2.3 运算放大器电路 5.2.4 二级管双T型电桥电路 5.3电容式传感器的运用 5.3.1 电容测厚仪 5.3. ...

  7. 开发linux显卡驱动,显卡驱动开发DRM入门--Apple的学习笔记

    由于之前的blog提及kmscube的源码我没有找到,所以只能在网上搜索了. DRM简介 DRM是Linux目前主流的图形显示框架,同时DRM可以统一管理GPU和Display驱动,使得软件架构更为统 ...

  8. python图片表格提取算法_python识别并提取表格中的文字--Apple的学习笔记

    此文为的后记.读者可以参考https://www.jianshu.com/p/b85667a4ef76 用到的python文字提取库pytesseract.用pip install pytessera ...

  9. python实现投票功能_[python 学习笔记] 简单刷投票功能

    最近好久没写了,其实有道云里积累了好多,但是没时间整理. 实在是太多事情要做了 好多投票都是不需要登录的,这种刷起来很简单. 原理就是 X-Forwarded-For .废话不多说上代码 import ...

最新文章

  1. 网站错误记录:A transport-level error has occurred when sending the request to the server.
  2. 【python3的学习之路七】函数
  3. 数据库 CURD测试题【中等】
  4. 值得拥有!精心推荐几款超实用的 CSS 开发工具
  5. oracle资产负债表重分类吗,【好会计】讲讲资产负债表中的重分类!
  6. Hackerlands:城市Hackerspaces的农村版本
  7. PHP快速入门教程:hello world
  8. thinkphp学习笔记8—命名空间
  9. NSUserDefault
  10. 火山安卓文件读写操作演示
  11. 局域网服务器共享文件夹设置,局域网服务器共享文件访问权限管理方法
  12. C3P0连接池的使用
  13. php加图片源码_php给现有的图片加文字水印代码
  14. Excel 数据透视表教程大全之 03 刷新数据、添加多个字段作为值字段、值显示为总数的百分
  15. NGINX源码之:ngx_hash
  16. 微pe工具箱+软碟通 制作 U盘启动盘
  17. Dell inspiron 7580硬件升级_更换电池加内存条移动硬盘
  18. 什么是“ Windows任务的主机进程”,为什么我的PC上运行着这么多主机?
  19. python中pass语句的作用是什么_简述 Python 中 pass 语句的作用。
  20. PCA(主成分分析)获取BoundingBox代码分析

热门文章

  1. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
  2. Maya阿诺德室外环境灯光照明和渲染技术学习视频教程
  3. 如何向非技术人员解释“稀疏傅里叶变换”算法?
  4. Pliops XDP(Extreme Data Processor)数据库存储设计的新型加速硬件
  5. Go: 分布式学习利器(3) -- Go的数据类型和运算符
  6. linux平台下QtCreator中集成Valgrind系列工具
  7. react 从使用 看定义
  8. java运算符-逻辑、三元运算符
  9. Java中 实体类 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念
  10. 【2018-01-22】HTML-表单及表单元素