持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情
今日来讲解程序开发过程中的一个小功能:鼠标点击位置获取
如何获取鼠标点击窗口上的点呢?刚开始我以为只是简单的 QPoint pt = this->pos();获取就可以了,谁曾想不是这样的,查看QWidget基类,发现怎么有这么多获取位置的函数呢?简直是晕头转向了!
一时之间不知道改用哪个函数了,为此花费了点时间对窗口上鼠标点的位置获取做了详细了解,并将内容分享给大家~
1:QWidget::pos
当前函数获取的位置是窗口左上角位于屏幕的位置。
使用图片显示的更清楚。
2:QCursor::pos
功能:获取当前点位于屏幕坐标的点
QPoint pt0 = this->cursor().pos();
这时候,想要获取点的位置,还需要另转换
有人会说,直接使用mousePressEvent事件获取不就可以了吗?当需要点击某个按钮时,获取选中位置时此刻mousePressEvent事件是不被响应的,就不能用QMouseEvent来实现了。
3:QWidget::mapFromGlobal
功能:屏幕坐标点 --> 当前窗口坐标点
QPoint mapFromGlobal(const QPoint &) const;
参数:屏幕坐标点
返回值:位于窗口的坐标点
4:QWidget::mapFromParent
功能:屏幕坐标点 --> 当前窗口坐标点
5:QWidget::mapToGlobal
功能:窗口上坐标点 --> 屏幕坐标点
6:QWidget::mapToParent
功能:窗口上坐标点 --> 屏幕坐标点
综上所述功能,各种获取点的方式以及转换进行整理,代码如下:
//获取:窗口基于屏幕的位置,左上角位置
QPoint pt = this->pos();
//获取当前点位于屏幕坐标的点
QPoint pt0 = this->cursor().pos();
//屏幕坐标点 --> 成当前窗口坐标点
QPoint pt1 = this->mapFromGlobal(pt0);
//窗口上坐标点 -- >屏幕坐标
QPoint pt2 = this->mapToGlobal(pt1);
//当前窗口坐标 -- > 成屏幕坐标
QPoint pt3 = this->mapToParent(pt1);
//屏幕坐标 -- >窗口坐标
QPoint pt4 = this->mapFromParent(pt0);
qDebug() << "pt = " << pt << ", pt0 = " << pt0 << ", pt1 = " << pt1 << ", pt2 = " << pt2 << ", pt3 = " << pt3 << ", pt4 = " << pt4 ;
有需要的小伙伴可以拿去使用了。
刚开始接触这几个函数时,第一感觉,怎么这么多获取方法,了解下来发现,只有两个功能:屏幕点转成坐标点、坐标点转成屏幕点。
今天的讲解到这里了~
我是中国好公民st,一名C++开程序猿~