Qt 坐标位置转换

Qt 坐标位置转换

文章目录

  • Qt 坐标位置转换
    • 常见的位置坐标转换
    • Qt窗体中常用坐标的区别与获取途径
      • 当前光标相对于屏幕的绝对位置
      • 当前光标相对于当前窗口的位置
      • 鼠标事件发生的位置
      • 窗体的位置
      • 判断鼠标光标是否悬浮在某个子控件上

从事Qt快一年了 ,在做坐标转换的时候容易搞混 这边重新梳理一下 做一下总结

最主要的几种坐标系统:

  1. 窗口坐标(Window Coordinates):窗口坐标是相对于窗口左上角的坐标。在这个坐标系统中,原点(0,0)位于窗口的左上角,x 轴从左到右增加,y 轴从上到下增加。这意味着,如果你在窗口中的某个位置点击鼠标,那么你得到的鼠标点击事件的坐标就是相对于窗口左上角的坐标。
  2. 显示器坐标(Screen Coordinates):显示器坐标是相对于整个显示器的坐标。在这个坐标系统中,原点(0,0)位于显示器的左上角,x 轴从左到右增加,y 轴从上到下增加。这意味着,无论你在哪个窗口或者哪个部分的屏幕上点击鼠标,你得到的鼠标点击事件的坐标都是相对于显示器左上角的坐标。
  3. 父窗口坐标(Parent Coordinates):这是相对于父窗口(如果有的话)的坐标系统。原点(0,0)位于父窗口的左上角。这在处理嵌套窗口或控件时非常有用。
  4. 场景坐标(Scene Coordinates):这是在 QGraphicsScene 中使用的坐标系统,用于处理图形项的位置和变换。原点(0,0)可以在场景的任何位置,默认在中心 这取决于你如何设置和使用场景。
  5. 视图坐标(View Coordinates):这是在 QGraphicsView 中使用的坐标系统,用于处理视图滚动和缩放。原点(0,0)位于视图的左上角。

常见的位置坐标转换

  1. QPoint QMouseEvent::pos()
    这个只是返回鼠标事件相对这个widget(重载了QMouseEvent的widget)的位置。
  2. QPoint QMouseEvent::globalPos()
    窗口坐标,这个是返回鼠标的全局坐标,相对于屏幕的左上角
  3. QPoint QCursor::pos()
    返回相对显示器的全局坐标
  4. QPoint QWidget::mapToGlobal(const QPoint & pos) const
    将窗口坐标转换成显示器坐标
  5. QPoint QWidget::mapFromGlobal(const QPoint & pos) const
    将显示器坐标转换成窗口坐标
  6. QPoint QWidget::mapToParent(const QPoint & pos) const
    将窗口坐标获得的pos转换成父类widget的坐标
  7. QPoint QWidget::mapFromParent(const QPoint & pos) const
    将父类窗口坐标转换成当前窗口坐标
  8. QPoint QWidget::mapTo(const QWidget * parent, const QPoint & pos) const
    将当前窗口坐标转换成指定parent坐标。
  9. QWidget::pos() : QPoint
    这个属性获得的是当前目前控件在父窗口中的位置
  10. const QPointF & QMouseEvent::screenPos() constQPoint QMouseEvent::globalPos() 值相同,但是类型更高精度的QPointF
    请添加图片描述

请添加图片描述

例如 pWidget->mapToGlobal(QPoint(x,y));即 把你在pWidget里面的坐标(x,y) 所表示的点. 用Global的坐标表示 即 pWidget->mapToGlobal(QPoint(0,0)) +QPoint(x,y) = pWidget->mapToGlobal(QPoint(x,y)) 如图:

请添加图片描述

Qt窗体中常用坐标的区别与获取途径

当前光标相对于屏幕的绝对位置

QCursor::pos()

当前光标相对于当前窗口的位置

this->mapFromGlobal(QCursor::pos())

鼠标事件发生的位置

void MainWindow::mouseReleaseEvent(QMouseEvent* event)
{
    QPoint pos = event->pos();             //相对于当前窗口的位置
    QPoint globalPos = event->globalPos();    //相对于屏幕的全局绝对位置
}

窗体的位置

QWidget *widget = new QWidget();
widget.pos();    //窗体的左上角的位置

判断鼠标光标是否悬浮在某个子控件上

获取子窗口geometry,判断是否包含光标所在的坐标,如果是,则表示光标正悬浮在该子控件上。

注意:

**geometry()是相对于父窗口的相对位置,而QCursor::pos()获取的是鼠标绝对位置。**需要进行一次转换,要不将父窗口的相对位置进行换算,要不将鼠标的绝对位置进行换算,这里采用将鼠标绝对位置换算到控件上,示例代码如下:

if(ui->pushButtonTest->geometry().contains( this->mapFromGlobal(QCursor::pos())))
{
    //do something...
}

参考demo

传入的坐标原则为mapTo接口传入以自身左上角为原点的坐标,mapFrom类型接口传入以global/parent左上角为原点的坐标

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

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

相关文章

linux下设置背景

参考https://zhidao.baidu.com/question/1778024793821420060.html 我要在QWidget里设置背景,之前在windows里选中对应的QWidget对象,右键changeStyleSheet后有个小笔一样的编辑,可以添加资源,并设置为背景;但是linux…

x-zse-96,android端,伪dex加固,so加固,白盒AES,字符串加密

x-zse-96,android端,伪dex加固,so加固,白盒AES,字符串加密 上一篇某招聘软件的sig及sp参数被和谐掉了,所以懂得都懂啊! 因为web的api没有那么全,所以来看了下app的,ios的防护几乎没有,纸糊的一样,android端的有点复杂了,到最后我也没能完整的实现整个加密过程,我也只复现到DF…

【MySql实战--日志系统:一条SQL更新语句是如何执行的?】

前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块。相信你还记得,一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达存储引擎。 那么,一条更新语句的执行流程又是怎…

亮数据代理IP轻松解决爬虫数据采集痛点

文章目录 一、爬虫数据采集痛点二、为什么使用代理IP可以解决?2.1 爬虫和代理IP的关系2.2 使用代理IP的好处 三、亮数据代理IP的优势3.1 IP种类丰富3.1.1 动态住宅代理IP3.1.2 静态住宅代理IP3.1.3 机房代理IP3.1.4 移动代理IP 3.2 高质量IP全球覆盖3.3 超级代理服务…

UE4 Json事件设置Asset值

通过Json事件来设置,比如骨骼网格体(换皮)等等

【漏洞复现】1. WebLogic 反序列化漏洞(CVE-2019-2890)复现与分析

文章目录 1. 基础知识2. 复现2.1 漏洞介绍漏洞影响版本: 2.2 漏洞原理分析2.3 漏洞复现2.3.1 环境搭建2.3.2 漏洞验证2.3.3 漏洞利用2.3.4 POC分析 2.4 漏洞修复 1. 基础知识 WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于J…

区域规划(Regional Planning)的学习笔记

目录 一、概念题 1.区域的概念、类型、特性 2.区域分析的概念、主要内容 3.自然环境、自然资源的概念 4.区域自然资源评价的内容 5.可持续发展理论定义 6.经济增长、经济结构定义 7.产业结构概念 8.人口增长分析的含义、指标 9.技术进步概念、类型 10.技术进步对区域…

『Python爬虫』极简入门

本文简介 点赞 收藏 关注 学会了 声明:请勿使用爬虫技术获取公民隐私数据、数据以及企业或个人不允许你获取的数据。 本文介绍如何使用 Python 写一只简单的爬虫,作为入门篇,这个程序不会很复杂,但至少可以讲明爬虫是个什么东…

Nacos 配置管理-快速入门

** Nacos 配置管理-快速入门 ** 2024-3-18 段子手168 1、首先在 nacos 发布配置(确认安装启动了 nacos 服务)。 浏览器访问 http://127.0.0.1:8848/nacos, 打开 nacos 控制台, 并点击菜单:新增 --》配置管理 --》配置列表 --》…

html5cssjs代码 034 自定义字体

html5&css&js代码 034 自定义字体 一、代码二、解释 这是一个带有自定义字体的网页,设置了页面背景颜色、文字颜色以及全局样式。它定义了三种自定义字体并通过font-face规则引入外部字体文件,并通过CSS类(.f1, .f2, .f3)…

2024上半年四川省属事业单位报名指南✅

⏰报考时间 1⃣报名时间:2024年3月21日10:00——3月25日18:00 2⃣缴费时间:截止2024年3月26日18:00 ⚠通过网络报名且上传相片质量合格的报考者,未按要求在规定时间内进行网上缴费的,视为自动放弃报考。 3⃣公共科目笔试时间&…

力扣---两数相加

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 …

QGIS开发笔记(一):QGIS介绍、软件下载和加载shp地图数据Demo

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136888334 红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

【亲测有效】axureRP9授权密钥 Mac/Windows

哪里有axureRP9授权密钥?这里为大家带来了axureRP9中文授权版资源,内含axureRP9授权密钥,亲测支持apple Intel/M1/M2以及Windows系统! 【永久可用】axureRP9授权密钥 Mac版 【永久可用】axureRP9授权密钥 Windows版

吴恩达机器学习-可选实验室:简单神经网络(Simple Neural Network)

在这个实验室里,我们将使用Numpy构建一个小型神经网络。它将与您在Tensorflow中实现的“咖啡烘焙”网络相同。 import numpy as np import matplotlib.pyplot as plt plt.style.use(./deeplearning.mplstyle) import tensorflow as tf from lab_utils_common impor…

python网络爬虫实战教学——urllib的使用(3)

文章目录 专栏导读1、urlsplit2、urlunsplit3、urljoin4、urlencode 专栏导读 ✍ 作者简介:i阿极,CSDN 数据分析领域优质创作者,专注于分享python数据分析领域知识。 ✍ 本文录入于《python网络爬虫实战教学》,本专栏针对大学生、…

基于java+springboot+vue实现的学生管理系统(文末源码+Lw+ppt)23-486

摘 要 学生管理系统的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品,体验高科技时代带给人们的方便,同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓,iOS相比较起来&#x…

高校校园点餐系统|基于JSP技术+ Mysql+Java+ B/S结构的高校校园点餐系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…

百度智能云加速「低代码+大模型」融合,爱速搭位居 2023 年 IDC 低代码/无代码领导者象限

近期,IDC 发布了《IDC MarketScape: 中国低代码/无代码开发平台 2023 年厂商评估》研究报告。 IDC 预测,到 2027 年,低代码的市场规模将达到 106.3 亿人民币,未来 5 年市场年复合增长率为 32.3%。 凭借对企业级开发场景的深度支…

MD5源码(C语言描述)

本文介绍MD5源码(C语言描述)。 MD5(Message-Digest Algorithm 5),即消息摘要算法5,是一种被广泛使用的消息散列算法。散列算法的基础原理是:将数据(如一段文字)经过运算转换为一段固定长度&…