据我了解,如果您单击小部件中的任意位置,则希望在窗口上获得位置.
为了解决这个问题,逻辑如下:
>获取鼠标相对于小部件的位置
>将位置转换为全局位置,即相对于屏幕.
>将该全局位置转换为相对于窗口的位置.
对于第一步,如果使用mousePressEvent(),event.pos()返回相对于小部件的位置.
第二步,您必须使用mapToGlobal()将相对于小部件的位置转换为global.
对于第三步,使用window的mapFromGlobal().
def mousePressEvent(self, event):
p = event.pos() # relative to widget
gp = self.mapToGlobal(p) # relative to screen
rw = self.window().mapFromGlobal(gp) # relative to window
print("position relative to window: ", rw)
super(Widget, self).mousePressEvent(event)
更新:
QGraphicsScene不是小部件,它不是可视元素,尽管它是可视元素QGraphicsView表示的一部分.为了让您理解,我将用一个类比向您解释,假设有一个摄影师记录场景,在该示例中QGraphicsScene是场景,而QGraphicsView是摄像机记录的内容,也就是说,它显示了一部分QGraphicsScene ,因此可能会有另一个摄影师从另一个角度记录场景,因此它将从另一个角度显示同一场景,因此场景的位置取决于相机,因此如果您当前的问题等同于说出哪个位置P点相对于相机的第i个,并且不可能从场景中获取,应该从相机中获取.
因此,总而言之,您不应使用Q