获取鼠标点击处的控件并获取其坐标

本文介绍了在QT中如何获取控件的屏幕坐标,提供了两种方法实现这一功能:一是使用内置的mapToGlobal方法;二是通过递归遍历父控件来累加偏移量计算坐标。
int mouse_x = QCursor::pos().x();//鼠标点击处横坐标
int mouse_y = QCursor::pos().y();//鼠标点击处纵坐标

QWidget *action = QApplication::widgetAt(mouse_x, mouse_y);//获取鼠标点击处的控件
QPoint GlobalPoint(action->mapToGlobal(QPoint(0, 0)));//获取该控件在窗体中的坐标

int x = GlobalPoint.x();//该控件在窗体中左上角横坐标
int y = GlobalPoint.y();//该控件在窗体中左上角纵坐标
//////////////////////////////////////////////////////////
QT 获取控件widget的屏幕坐标
 :
方法一:
/// 获取窗口控件的屏幕位置,类似于ClientToScreen
QPoint GlobalPoint(widget->mapToGlobal(QPoint(0,0)));

方法二:
/// 获取窗口控件的屏幕位置
static QPoint getPos(QWidget* widget)
{
 if (NULL == widget)
 {
  return QPoint(-1,-1);
 }
 float px = 0;
 float py = 0;
 QWidget *parent = widget;
 QWidget *preParent= NULL;
 do
 {
  QPoint p = parent->pos();
  px += p.x();
  py += p.y();
  preParent = parent ;
  parentw = parent->parentWidget();
 
 } while (NULL != parent);
 QSize size = preParent->frameSize();
 QSize size2 = preParent->size();
 px = px + (size.width() - size2.width())/2;
 py = py + (size.height() - size2.height() - (size.width() - size2.width())/2);
 QPoint pr(px, py);
 return pr;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值