获取鼠标点击处的控件并获取其坐标(对控制控件和绘制控件都很实用)

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

http://blog.csdn.net/mingxia_sui/article/details/7943169
posted @   findumars  Views(8164)  Comments(0Edit  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2015-06-02 发现一个好的开源项目:lomoX(挑着看,每天看一点,看一年就ok了)——用Webkit开发桌面软件,炫
点击右上角即可分享
微信分享提示