【QT入门】Qt自定义控件与样式设计之鼠标相对、绝对位置、窗口位置、控件位置

Qt使用API实现鼠标点击操作 hWnd:指定要接收消息的窗口的句柄。给出的绝对数据作为鼠标的实际y坐标,给出的相对数据作为移动的mickeys数。思路:首先你需要获取组件在窗口上的相对坐标,然后再进行点击,这是因为,组件相对于窗口,这个坐标是恒定不变的,变化的只是窗口本身在桌面的位置,获取窗口在桌面的位置,需要先获取当前显示器的分辨率。思路:首先你需要获取组件在窗口上的相对坐标,然后再进行点击,这是因为,组件相对于窗口,这个坐标是恒定不变的,变化的只是窗口本身在桌面的位置,获取窗口在桌面的位置,需要先获取当前显示器的分辨率。 阅读详情

往期回顾

【QT入门】 Qt自定义控件与样式设计之QSlider用法及qss-优快云博客

【QT入门】Qt自定义控件与样式设计之qss的加载方式-优快云博客

【QT入门】Qt自定义控件与样式设计之控件提升与自定义控件-优快云博客

【QT入门】Qt自定义控件与样式设计之鼠标相对、绝对位置、窗口位置、控件位置

这里我们主要是需要明确Qt的坐标系组成,熟悉相关相对绝对函数即可。

一、鼠标位置基本概念

1、桌面原点(0, 0)

桌面原点(0, 0),在桌面左上角。

2、应用程序原点(0,0)

应用程序原点(0,0),在应用程序左上角。

一般都是x向左为正, y向下为正

3、绝对位置

相对于电脑桌面左上角的位置,也就是相对于桌面原点的位置

4、相对位置

相对于应用程序左上角的位置,也就是相对于应用程序原点的位置

二、鼠标、控件、应用程序窗口的位置函数

1、鼠标的位置

1.1●QCursor:pos()

该函数返回值为鼠标相对于桌面左上角的绝对位置

当我们重写mousePressEvent这个方法时:

1.2●mousePressEvent的参数event的位置  
(1)event-> pos()的返回值为鼠标相对于应用程序的位置

(2)event- > globalPos()返回值为相对于桌面原点的位置,绝对位置。(跟QCursor:pos()结果是一样的)

2、控件的位置 

2.1QPoint p = ui.pushButton-> pos();

返回值为相对位置,也就是按钮控件相对于应用窗口原点的位置 

2.2QPoint p = ui.pushButton-> mapToGlobal(QPoint(0, 0)); 

返回值为绝对位置,也就是按钮相对于桌面原点的绝对位置

2.3QRect rect. = ui.pushButton-rect();

这个函数的返回值为控件的大小。

3、应用程序窗口的位置

3.1QRect rect = m_pDIg-> geometry(); 

返回值为绝对位置,也就是对话框相对于桌面坐标原点的rect。

3.2QRect rect= m_pDIg-> pos();

返回值为相对位置。

3.3QRect rect = m_pDlg-> rect);

返回值为应用窗口的大小 

三、示例

我们通过调用这一系列方法,实现点击鼠标时控制台打印输出对应被点击位置的坐标。

1、最终效果

2、完整实现代码

void Widget::mousePressEvent(QMouseEvent *event)
{
    qDebug() << QCursor::pos();  //鼠标绝对位置,相对于桌面左上角的位置

    //鼠标相对于应用程序的位置,相对位置
    qDebug() << "event->pos()         " << event->pos();
    //鼠标相对于桌面原点的位置,绝对位置
    qDebug() << "event->globalPos()   " << event->globalPos();
}

void Widget::on_pushButton_clicked()
{
    //按钮控件相对于应用窗口原点的位置
    qDebug() << u8"控件相对位置" << ui->pushButton->pos();

    //按钮相对于桌面原点的绝对位置
    QPoint jPos = ui->pushButton->mapToGlobal(QPoint(0,0));
    qDebug() << u8"控件绝对位置" << jPos;

    //控件的大小,长*宽的大小
    QRect rect = ui->pushButton->rect();
    qDebug() << rect;

    //窗口相对于桌面坐标原点的位置
    qDebug() << u8"窗口绝对位置" << this->geometry();  // 绝对位置
    
    //窗口的大小,长*宽的大小
    qDebug() << u8"窗口矩形" << this->rect();

    //TempDialog *dlg = new TempDialog(this);
    std::unique_ptr<TempDialog> dlg(new TempDialog(this));
    
    //如何让弹出的对话框位置在按钮左边对齐
    dlg->move(jPos.x() - dlg->width(), jPos.y());

    dlg->exec();
}

注意:

这里用了一个智能指针,这个要说一下,由于我们是自己创建了一个TempDialog类,如果不用智能指针,那么关闭窗口后他是不会自动销毁的,就会造成内存泄漏。

当然如果创建的时候指定了this,那么后面关闭对话框时不会析构,但是关闭窗口时就会把对话框一起析构掉,也不会出现内存泄漏问题。

推荐还是用智能指针,就不用考虑内存泄漏的问题了。


以上,就是鼠标、控件、应用程序的位置简单介绍

都看到这里了,点个赞再走呗朋友~

加油吧,预祝大家变得更强!

Qt获取鼠标位置(绝对位置、相对位置) 在进行界面编程时,经常需要获取鼠标的位置,特别是需要知道鼠标在界面上某个控件的相对位置。在Qt其实获取这几种位置还是比较简单的。首先我们需要了解Qt的坐标系统,Qt的坐标系统是有QPainter类控制的,而QPainter是在绘图设备上绘制。而有时我们并不需要进行绘图只需要通过鼠标事件获取坐标位置而已,这时我们需要了解两点:坐标系统和控件的层次关系。首先默认坐标系统中原点(0,0)在其左上角,x坐 阅读详情

相关推荐

Qt开发 | 无边框窗口 | 自定义标题栏 | 拖拽拉伸 | 窗口阴影 | 圆角窗口

QWidget是 Qt 框架中的一个核心类,它是所有控件和窗口的基类。QWidget提供了创建和管理 GUI 组件的基础功能。Qt所有的窗口、控件以及布局都是派生于QWidget。关键特性与功能窗口和控件的基类:几乎所有的 GUI 组件都是QWidget的子类,包括按钮、文本框、标签、窗口等。布局管理QWidget支持多种布局管理方式,如水平布局、垂直布局和网格布局,这些布局可以帮助开发者轻松地组织控件的位置和大小。事件处理QWidget可以接收和处理各种事件,如鼠标点击、键盘输入、窗口大小变化等。

zwcslj的博客 2348

Qt5鼠标的光标

Qt5鼠标的光标

m0_73443478的博客 1485

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

Qt窗体中常用坐标的区别与获取途径1 当前光标相对于屏幕的绝对位置2 当前光标相对于当前窗口的位置3 鼠标事件发生的位置:4 窗体的位置:5 判断鼠标光标是否悬浮在某个子控件上: 1 当前光标相对于屏幕的绝对位置 QCursor::pos() 2 当前光标相对于当前窗口的位置 this-&amp;amp;gt;mapFromGlobal(QCursor::pos()) 3 鼠标事件发生的位置: void Mai...

hyafz的专栏 697

QT学习笔记:调整控件大小和位置

调整QT界面中控件大小和位置。

1万+

Qt鼠标相对位置、绝对位置、窗口位置、控件位置、控件大小、控件绝对位置

  在Qt界面开始时,有时需要根据鼠标位置,控件位置来确定小窗口的弹出位置,本篇博客来分析Qt的各种位置。   先声明两个名词: 绝对位置:相对于桌面窗口原点(0,0)的位置 相对位置:相对于应用程序原点(0,0)的位置 坐标系   在讨论各种位置之前,我们需要了解电脑桌面坐标系、应用程序坐标系。一般都是规定左上角为坐标原点,水平向右为x正,竖直向下为y正,如下图:   比如我的电脑屏幕是2500*1600,对于桌面坐标系,左边是0,右边是2500,上面是0,下面是1600。   创建一个Qt GUI

琅嬛福地 1万+

Qt QChart 选择区间、鼠标位置实时显示

Qt QChart 选择区间、鼠标位置实时显示 效果图 程序 一、运行环境 Qt Creator 4.3.1 Based on Qt 5.9.0 (MSVC 2015, 32 bit) 二、程序目录结构 三、代码 QChartTest.pro 只加入了一段代码 QT += charts #------------------------------------------------- # # Project created by QtCreator 2020-12-14T11:0

你的博客 6451

【QT入门】Qt自定义控件与样式设计之自定义QLineEdit实现搜索编辑框

【QT入门】Qt自定义控件与样式设计之自定义QLineEdit实现搜索编辑框

LF__plus的博客 2518

Material Studio 2024安装避坑指南:从证书配置到权限设置的完整解决方案

本文详细解析了Material Studio 2024的安装流程,从环境准备到权限优化的完整解决方案。针对证书配置、系统权限和计算服务等常见问题,提供了12个关键风险点的避坑指南,帮助科研工作者高效完成安装,提升材料模拟工作的效率。

moon9的博客 773

【QT入门】Qt自定义控件与样式设计之自定义QTabWidget实现tab在左,文本水平的效果

【QT入门】Qt自定义控件与样式设计之自定义QTabWidget实现tab在左,文本水平的效果

LF__plus的博客 4832

RYU+mininet——RYU

1. 使用RYU做mininet的控制器 1.1 RYU介绍与安装 RYU是一款基于python的控制器,你可用Ryu实现各种想要实现的网络功能,它可以下发或接收流表进行各种路由运算。 建议使用高版本的Ubuntu系统安装ryu,否则会有各种错误,安装过程比较简单,如下: apt install gcc libffi-dev libssl-dev libxml2-dev libxslt1-...

qq_34415266的博客 1万+

研究生课程笔记:软件包在流行病学中的应用(三)——STATA软件

关键词:STATA软件基本操作、STATA对于流行病学研究的实现、STATA对复杂抽样设计样本量计算的实现 一、STATA软件基本操作 这部分网上教程有很多,也可以直接根据stata自带的help功能进行自学,在此只记录课程中提及的功能项。 1. 变量编辑 1.1 赋值:label type(按精度区分) 1) 整型:int(32), short(16), long(32) 2) 实型:flo...

weixin_45463530的博客 2432

pyqt获取鼠标相对位置绝对位置

pyqt获取鼠标相对位置绝对位置

jacke121的专栏 5230

(3万字深度解析)Kaggle《房价预测:高级回归技巧》详解复现攻略

在这篇教程式文章中,我们从零开始完成了 Kaggle《房价预测:高级回归技巧》比赛的复现工作,涵盖了数据预处理、特征工程、模型训练、调优、解释和融合的完整流程。深入理解数据:阅读数据描述,结合常识对每个特征作出合理处理(如缺失值填充’None’表示无此设施 、异常值剔除 等)。对目标和偏态特征进行对数变换,使分布更平滑,从而更好满足模型假设并提升准确度。特征工程:我们创造了总面积、总浴室等新特征,整合信息提高模型可学习性。

qq_38334677的博客 1772

深入理解Qt中的坐标系统:鼠标、窗口与控件位置详解

本文深入解析Qt中的多层坐标系统,包括屏幕坐标、窗口坐标和控件坐标的转换关系与应用场景。详细介绍了鼠标位置获取方法、窗口几何属性调整技巧以及控件位置管理的核心API,通过可拖拽面板的实战案例演示了坐标系统的实际应用。文章还针对常见问题提供了解决方案,并强调在不同DPI屏幕上处理坐标时的注意事项,为开发者构建精确的用户界面提供了全面的指导。

软件科学-郝学胜 1051

Ubuntu系统 nano 编辑器使用教程

• 原因:文件编码不兼容(如 Windows 的 CRLF 换行符)。• 若使用 SSH 工具(如 PuTTY),确保终端设置中未占用。掌握这些操作后,你可以高效使用 nano 完成大部分文本编辑任务!• 底部快捷键栏:显示常用操作的快捷键(• 如果文件已修改,会提示是否保存:按。• 顶部状态栏:显示文件名和编辑状态。表示 Ctrl + G(查看帮助)。保存时自动生成备份文件(原文件名后加。• 强制保存只读文件:用。启动 nano 时添加。启动 nano 时添加。(重做)触发自动缩进。

qq_44534541的博客 2085

深入理解DQN中的Q值:核心概念和应用

在强化学习中,Q值(或称为动作价值函数)是核心概念之一。Q值函数 ( Q(s, a) ) 表示在给定状态 ( s ) 下,采取动作 ( a ) 并遵循某策略后,智能体从当前状态到未来状态所能获得的预期总回报。简言之,Q值是评估特定状态和动作对的好坏的指标。

qlkaicx的博客 2975

Qt开发 | qss介绍及控件应用 | qss加载方式 | 控件提升 | 鼠标位置与控件位置 | 搜索编辑框 | tab在左文本水平的tabWidget

Qt Style Sheets ,简写是QSS,Qt样式表,用于修改控件外观,美化界面。它类似于前端的CSS(Cascading Style Sheets)但专门用于Qt应用程序。QSS允许开发者通过样式表来控制窗口部件的外观和感觉,而无需修改应用程序的源代码。

zwcslj的博客 2509

疾病负担研究(GBD)介绍

今天我们来聊一聊第一个公共数据库——GBD数据库,全称叫做global burden of disease(全球疾病负担),该数据库每年都会更新,目前已经更新到GBD2019。 这里直接给大家贴出网址:Global Burden of Disease Study 2019 (GBD 2019) Data Resources | GHDx 上图中红色圈圈标识的就是数据库的数据获取界面的链接,大家直接点击即可. 数据的检索十分方便: Context下拉菜单中可以选择不同的选项,默认是caus

weixin_44240228的博客 1万+

Qt中的绝对位置与相对位置

在Qt的开发中,有时候需要获取鼠标点击的位置的坐标。在Qt中坐标分为相对坐标和绝对坐标;相对坐标是以控件的左上角为(0,0)点的坐标系的坐标,绝对坐标是以显示器屏幕的左上角为(0,0)点的坐标。如果是窗口里面的某个子控件,你用鼠标获取它的位置时,它也是基于控件的左上角的坐标系的位置。如果想获取控件的绝对位置,需要再转一遍。获取鼠标位置的3个方法。

燃犀的博客 1865

晟矽微MC32F7361定时器的使用案例说明

110所以TIMER0所用的频率是FCPU的1/64,也就是8/64MHZ. 为1/8MHZ。//io口下拉电阻 1:enable 0:disablea。//io口上拉电阻 1:enable 0:disable。//io口下拉电阻 1:enable 0:disable。//io口上拉电阻 1:enable 0:disable。//io口下拉电阻 1:enable 0:disable。//io口上拉电阻 1:enable 0:disable。

liyanfei123456的博客 1130

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【QT入门】 鼠标按下和移动事件实现无边框窗口拖动

【QT入门】 鼠标按下和移动事件实现无边框窗口拖动

LF__plus的博客 3142

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

《QT从基础到进阶·十七》QCursor鼠标的不同位置坐标获取

注意geometry()是相对于父窗口的相对位置,而QCursor::pos()获取的是鼠标绝对位置。当前光标相对于当前窗口的位置:this->mapFromGlobal(QCursor::pos())获取子窗口geometry,判断是否包含光标所在的坐标,如果是,则表示光标正悬浮在该子控件上。鼠标光标相对于整个电脑屏幕的位置:QCursor::pos()

cs1395293598的博客 2533

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

QT 一个控件的坐标怎么相对固定显示在另一个控件上(坐标系)

先给子控件设置它依赖于哪一个控件上显示 设置坐标的时候,就会相对那个控件的坐标显示 示例: 这样的话,不管怎么移动窗口,tableview显示的坐标都跟着groupBox的坐标而移动。补充一下QT里坐标系的知识:与鼠标位置有关的3个方法示例:  Qt是如何获取控件的相对位置示例: Qt是如何获取控件的绝对位置示例: 控件的大小:.........

ligare的博客 3722

QT判断鼠标是否在某子窗口控件上方

QT判断鼠标是否在某子窗口控件上方 需要注意的是,子窗口获取geometry,是相对于父窗口的相对位置,QCursor::pos()获取的是鼠标绝对位置,要不将父窗口的相对位置进行换算,要不将鼠标的绝对位置进行换算,这里本文采用将鼠标绝对位置换算到控件上,示例代码如下: if(ui-&gt;groupBox-&gt;geometry().contains(this-&gt;mapFromG...

uriel_chiang的博客 1万+

Qt判断鼠标在控件上

if (widget-&gt;geometry().contains(point)) {}QT判断鼠标是否在某子窗口控件上方需要注意的是,子窗口获取geometry,是相对于父窗口的相对位置,QCursor::pos()获取的是鼠标绝对位置,要不将父窗口的相对位置进行换算,要不将鼠标的绝对位置进行换算,这里本文采用将鼠标绝对位置换算到控件上,示例代码如下:if(ui-&gt;groupBox-&g...

陌上人如玉,公子世无双。 5098

Qt 坐标位置转换

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

乐褀的博客 2401
上一篇: 【QT入门】Qt自定义控件与样式设计之控件提升与自定义控件
下一篇: 【QT入门】Qt自定义控件与样式设计之自定义QLineEdit实现搜索编辑框
从一的
博客等级 码龄5年 1995粉丝 213原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值