Qt6.8 QGraphicsView鼠标坐标点偏差

ui文件拖放QGraphicsView,src文件定义QGraphicsScene赋值给图形视图。

	this->scene = new QGraphicsScene();
	ui.graph->setScene(this->scene);

在这里插入图片描述
对graphicview过滤事件,只能在其viewport之后安装,否则不响应。

ui.graph->viewport()->installEventFilter(this);

分别对鼠标事件响应。

//事件过滤器
bool CarPos::eventFilter(QObject* obj, QEvent* event)
{
	//按下鼠标
	if (event->type() == QEvent::MouseButtonPress) {
		//显示橡皮筋
		_origin = pos_global(event);
		if (!rubberBand)
			rubberBand = new QRubberBand(QRubberBand::Rectangle, this);
		rubberBand->setGeometry(QRect(_origin, QSize()));
		rubberBand->show();
	}
	//移动鼠标
	if (event->type() == QEvent::MouseMove) {		
		QPoint p = pos_global(event);
		rubberBand->setGeometry(QRect(_origin, p).normalized());
	}
	//释放鼠标
	if (event->type() == QEvent::MouseButtonRelease) {
		this->in_drawing = false;
	}

	return QMainWindow::eventFilter(obj, event);
}

要得到正确的橡皮筋图形,需要考虑点的坐标系转换。
在这里插入图片描述
在这里插入图片描述

//位置换算
QPoint CarPos::pos_global(QEvent* event)
{
	QMouseEvent* evt = static_cast<QMouseEvent*>(event);
	QPoint pt = evt->pos();
	//QPointF pt_f = ui.graph->mapTo(this, pt);
	QPointF pt_f = ui.graph->mapToParent(pt);
	return QPoint((int)pt_f.x(), (int)pt_f.y());
}

mapToParent是以QGraphicsView实例为父母级,会导致坐标向上高出10px(上下俩元素间隙)。应该用mapTo函数,this指向mainwindows。
在这里插入图片描述
弄清item之间的包含关系,能选择好坐标转换from或者to函数。
鼠标坐标点是QGraphicsView实例(ui.graph)的,橡皮筋坐标要正确,需要将坐标mapto到graph的父母级mainwindows,如果要得到graph内的场景scene坐标,则要mapToScene。

QPoint CarPos::pos_scene(QPoint pt)
{
	QPointF pt_f = ui.graph->mapToScene(pt);
	return QPoint((int)pt_f.x(), (int)pt_f.y());	
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/929521.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

macmini安装ubuntu网卡驱动BCM4360

安装成功效果如下 成功连接wifi 成功分配到IP 执行命令如下 1. sudo apt update 2. sudo apt install broadcom-sta-dkms 3. 重启电脑

网络测速工具

1. SPEEDTEST https://www.speedtest.net/ 2. 测速网 测速网 - 专业测网速, 网速测试, 宽带提速, 游戏测速, 直播测速, 5G测速, 物联网监测,Wi-Fi 7,Wi-Fi 6,FTTR,全屋Wi-Fi - SpeedTest.cn 3. 字节比特换算 bps&#xff08;bits per second&#xff09; 字节和比特的换算…

docker安装victoriametrics

docker安装victoriametrics 1、单机版安装2、victoriametrics增删改查2.1 、插入数据2.1.1 组装数据插入victoriametrics(java代码插入)2.1.2 Prometheus数据插入victoriametrics2.1.3 官网push到victoriametrics写法 2.2 、查询2.2.1 、Instant query&#xff08;即时查询&…

用ZipOutputStream生成的zip压缩包无法用WinRAR软件进行解压

1、问题 用WinRAR软件无法解压用ZipOutputStream生成的zip压缩包&#xff0c;而用360压缩就可以解压 2、原因 流没有正常关闭 3、解决办法 可以使用try-with-resources来自动关闭ZipOutputStream 例&#xff1a; public void compressedFile(String businessId, HttpServle…

WEB_星河飞雪_Windows(全)

Windows基础 这一节就主要将一些Windows的一些基础命令。 文件系统及其简述管理机制 首先linux操作系统有一个核心的概念就是——在linux中一切都是文件&#xff0c;几乎很多重要的东西都挂在根目录下&#xff08;“/”&#xff09;,它采用的是fhs目录结构&#xff08; File…

人工智能中的深度学习:原理与实践

什么是深度学习&#xff1f; 深度学习&#xff08;Deep Learning&#xff09;是机器学习的一个分支&#xff0c;旨在通过模拟人脑的神经网络结构来解决复杂的任务。深度学习通过多层神经网络&#xff0c;自动从数据中学习特征&#xff0c;避免了传统机器学习中手动特征工程的繁…

vite5+vue3+Ts5 开源图片预览器上线

images-viewer-vue3&#xff1a;一款Vue3的轻量级图像查看器&#xff0c;它基于Flip动画技术&#xff0c;支持PC和h5移动网页预览照片&#xff0c;如果它是Vue3开发的产品。 npm开源地址:https://www.npmjs.com/package/images-viewer-vue3?activeTabreadme Flip 动画 < …

Java 初学者的第一个 SpringBoot 系统

Java 初学者的第一个 SpringBoot 系统 对编程初学者而言&#xff0c;都存在一个 “第一个系统” 的问题。有些学习者找不到自己的 “第一个系统”&#xff0c;他们即使再努力也没有办法了解完整的系统&#xff0c;即使他们把教科书里的所有程序都跑通了。但是&#xff0c;面对…

传输层TCP_三次握手四次挥手的过程

三次握手四次挥手 三次握手 三次握手

光伏气象仿真系统的重要性

聊气象仿真系统的重要性之前先给大家推荐绿虫的仿真系统&#xff0c;绿虫可以获取到精准的气象数据&#xff0c;对接了国内气象站数据库&#xff0c;可以智能的匹配距离最近的&#xff0c;获取到最新最准的数据&#xff0c;下面给大家讲讲重要性。 一、提升发电效率方面&#x…

高阶数据结构--并查集--Java

一、并查集原理 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个单元素集 合&#xff0c;然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集 合的运算。适合于描述这…

SpringMVC ——(1)

1.SpringMVC请求流程 1.1 SpringMVC请求处理流程分析 Spring MVC框架也是⼀个基于请求驱动的Web框架&#xff0c;并且使⽤了前端控制器模式&#xff08;是⽤来提供⼀个集中的请求处理机制&#xff0c;所有的请求都将由⼀个单⼀的处理程序处理来进⾏设计&#xff0c;再根据请求…

Kube-Prometheus-Stack安装时初始化导入自定义Grafana dashboards

获取Grafana dashboards的JSON文件 这里是获取已经编辑好的Grafana dashboards的JSON文件&#xff1b;以便内置到Kube-Prometheus-Stack的helm charts的安装zip文件中。 编辑自定义dashboards JSON文件 获取dashboards JSON文件模板 其实Kube-Prometheus-Stack内部本身已经内…

手机租赁系统开发全攻略 创新服务助力企业智能转型

内容概要 在当今数字化飞速发展的时代&#xff0c;“手机租赁系统开发”正逐渐成为企业智能转型的必然选择。这一过程并不简单&#xff0c;但关键流程的解析将帮助企业理清思路。首先&#xff0c;了解需求和目标是基础&#xff0c;之后制定详细计划和流程图&#xff0c;让整件…

中安证件OCR识别技术助力鸿蒙生态:智能化证件识别新体验

在数字化和智能化的浪潮中&#xff0c;伴随国产化战略的深入推进&#xff0c;国产操作系统和软件生态的建设逐渐走向成熟。鸿蒙操作系统&#xff08;HarmonyOS Next&#xff09;作为华为推出的重要操作系统&#xff0c;凭借其开放、灵活和高效的特点&#xff0c;正在加速在多个…

Python_Flask03

这篇文章主要介绍的是数据库的增删改查操作&#xff0c;无多余好说的。 from flask import Flask from flask_sqlalchemy import SQLAlchemy from sqlalchemy import text from flask_migrate import Migrateapp Flask(__name__)# 本地基础信息的主机名 HOSTNAME "127.0…

Flink问题总结

目录 1、Flink 的四大特征(基石) 2、Flink 中都有哪些 Source,哪些 Sink,哪些算子(方法) 3、什么是侧道输出流,有什么用途 4、Flink 中两个流如何合并为一个流 5、Flink 中两个流如何 join 6、Flink 中都有哪些 window,什么是滑动,滚动窗口 7、flink 中都有哪些…

Q、K、V怎样学习到不同的特性;注意力机制和自注意力区别

目录 Q、K、V怎样学习到不同的特性 注意力机制和自注意力区别 Q、K、V怎样学习到不同的特性 Q = XW_Q:Query向量表示“我想要找什么”,通过输入向量X与权重矩阵W_Q的乘积得到。K = XW_K:Key向量表示“我有什么”,通过输入向量X与权重矩阵W_K的乘积得到。V = XW_V:Value向…

MySQL 入门大全:常用函数

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

Python酷库之旅-第三方库Pandas(259)

目录 一、用法精讲 1226、pandas.tseries.offsets.Week.name属性 1226-1、语法 1226-2、参数 1226-3、功能 1226-4、返回值 1226-5、说明 1226-6、用法 1226-6-1、数据准备 1226-6-2、代码示例 1226-6-3、结果输出 1227、pandas.tseries.offsets.Week.rule_code属性…