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

在Qt的开发中,有时候需要获取鼠标点击的位置的坐标。在Qt中坐标分为相对坐标和绝对坐标;相对坐标是以控件的左上角为(0,0)点的坐标系的坐标,绝对坐标是以显示器屏幕的左上角为(0,0)点的坐标。如图所示:
在这里插入图片描述

获取鼠标位置的3个方法

QCursor::pos() 的结果是鼠标相对于桌面的绝对位置
mousePressEvent的参数event的位置,event->pos() 是鼠标相对于应用程序的位置,
mapToGlobal(event->pos()) 和 event->globalPos()都是相对于桌面原点的位置为绝对位置

通过以下代码来验证

void CTestWidgetRadius::mouseMoveEvent(QMouseEvent *event)
{
   
	QString t_tip = QString("event->globalPos() = (%1,%2)\n QCursor::pos() = (%3,%4)").arg(event->globalPos().x()).arg(event->globalPos().y()).arg(QCursor::pos().x()).arg(QCursor::pos().y());
	QToolTip::showText(mapToGlobal(event->pos()), t_tip, this);
}

结果如图所示:

在这里插入图片描述

void CTestWidgetRadius::mouseMoveEvent(QMouseEvent *event)
{
   
	QString t_tip = QString("event->pos() = (%1,%2)\n QCursor::pos() = (%3,%4)").arg(event->pos().x()).arg(event->pos().y()).arg(QCursor::pos().x()).arg(QCursor::pos().y());
	QToolTip::showText(mapToGlobal(event->pos()), t_tip, this);
	
}

结果如图所示:
在这里插入图片描述
如果是窗口里面的某个子控件,你用鼠标获取它的位置时,它也是基于控件的左上角的坐标系的位置。想要获取它在窗口里面的位置需要转换:

btn->mapTo(this, mouseEvent->pos());//btn是窗口内的QPushButton控件,this是代表的当前窗口,如果是其它父对象,就填父对象指针。

如果想获取控件的绝对位置,需要再转一遍

mapToGlobal(btn->mapTo(this, mouseEvent->pos())) ;//这也就可以获取控件的绝对位置了。

最近更新

  1. TCP协议是安全的吗?

    2024-02-02 06:52:05       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-02 06:52:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-02 06:52:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-02 06:52:05       20 阅读

热门阅读

  1. 第2章 Linux 中执行命令

    2024-02-02 06:52:05       30 阅读
  2. iOS自动打包如何用Python实现

    2024-02-02 06:52:05       26 阅读
  3. Leetcode 《面试经典150题》169. 多数元素

    2024-02-02 06:52:05       29 阅读
  4. WPF 中 Loaded 和 Closing 窗口事件

    2024-02-02 06:52:05       30 阅读
  5. opencv学习 机器学习

    2024-02-02 06:52:05       34 阅读
  6. Android Build 依赖项

    2024-02-02 06:52:05       26 阅读
  7. 什么是IDE,新手改如何选择IDE?

    2024-02-02 06:52:05       28 阅读
  8. 【Eclipse插件开发】1Eclipse平台架构

    2024-02-02 06:52:05       31 阅读