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

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

获取鼠标位置的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);
}

结果如图所示:

Qt中的绝对位置与相对位置_第2张图片

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);
	
}

结果如图所示:
Qt中的绝对位置与相对位置_第3张图片
如果是窗口里面的某个子控件,你用鼠标获取它的位置时,它也是基于控件的左上角的坐标系的位置。想要获取它在窗口里面的位置需要转换:

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

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

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

你可能感兴趣的:(燃犀的QT笔记,qt,开发语言)