Qt QPoint全局/局部映射

Qt QPoint全局/局部映射,qt,Qt,我试图在锚定用户定义的角点(不总是左上角)时更改QPushButton子类的尺寸。QPushButton将QFrame定义为其父对象,并在窗口中自由浮动。当我试图在子类代码中更改QPushButton子类的大小时,我相信这会给我带来麻烦,因为MouseeEvents提供的QPoints是本地的。 我曾尝试使用myButton->mapToGlobal(QPoint)和myButton->mapFromGlobal,但我不太了解它们的工作原理。寻找例子让我两手空空。谁能举个简短的例子 本地(小部件

我试图在锚定用户定义的角点(不总是左上角)时更改QPushButton子类的尺寸。QPushButton将QFrame定义为其父对象,并在窗口中自由浮动。当我试图在子类代码中更改QPushButton子类的大小时,我相信这会给我带来麻烦,因为MouseeEvents提供的QPoints是本地的。 我曾尝试使用myButton->mapToGlobal(QPoint)和myButton->mapFromGlobal,但我不太了解它们的工作原理。寻找例子让我两手空空。谁能举个简短的例子

本地(小部件)坐标相对于小部件的左上角。全局坐标是屏幕坐标。它们很容易转换,像QMouseEvent这样的事件同时提供本地(pos())和全局(globalPos())坐标。 如果您想从小部件A映射到小部件B,您可以

const QPoint global = a->mapToGlobal( localPosInA );
const QPoint localInB = b->mapFromGlobal( global );
或简称:

const QPoint localInB = a->mapTo( b, localPosInA );
示例:假设您在(100110)(屏幕坐标)有一个顶级小部件w1,它在(10,10)(w1坐标)有一个子小部件w2,在(20,20)(w2坐标)有一个鼠标事件,那么鼠标光标的全局位置是

(100110)+(10,10)+(20,20)=(130140)(屏幕坐标)

这是w2->mapToGlobal(鼠标)

w2->mapTo(w1,mousePos)或者,由于w1是w2的父级,w2->mapToParent(mousePos)是

(10,10)+(20,20)=(30,30)(w1坐标)


如果您将所有内容都转换为全局坐标,在那里进行计算,然后将结果映射回小部件,即您需要的上下文,那么这可能是最简单的。

文档对鼠标位置不是很清楚:如果是本地位置(小部件),那么是什么,如果是屏幕相对的,那么是什么?