QWidget中添加QGraphicsScene,QGraphicsScene中添加QWidget,QWidget又嵌入QLabel,如何获得QGraphicsScene鼠标点击下的坐标
时间: 2024-03-04 07:48:16 浏览: 78
如果您想要在QGraphicsScene中获取鼠标事件的坐标,可以在QGraphicsScene上安装事件过滤器,并在事件过滤器中捕获鼠标事件。在事件过滤器中,可以使用QGraphicsScene的mapFromScene()函数将场景坐标转换为视图坐标,然后使用视图坐标转换为QWidget坐标,最后使用QWidget坐标转换为QLabel坐标。下面是一个示例代码:
``` python
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QGraphicsScene, QLabel, QWidget
class MyWidget(QWidget):
def __init__(self, parent=None):
super(MyWidget, self).__init__(parent)
self.label = QLabel("Hello World", self)
self.label.move(10, 10)
self.scene = QGraphicsScene(self)
self.scene.addWidget(self.label)
self.scene.installEventFilter(self)
def eventFilter(self, obj, event):
if obj == self.scene and event.type() == Qt.MouseButtonPress:
mouse_pos = event.scenePos()
view_pos = self.scene.views()[0].mapFromScene(mouse_pos)
widget_pos = self.mapToGlobal(view_pos)
label_pos = self.label.mapFromGlobal(widget_pos)
print("Label position: {}".format(label_pos))
return super(MyWidget, self).eventFilter(obj, event)
```
在上面的代码中,我们在QWidget中创建了一个QLabel,并将其添加到QGraphicsScene中。然后,我们安装了一个事件过滤器来捕获场景中的鼠标事件,并在事件过滤器中获取了鼠标坐标。最后,我们使用QWidget和QLabel的坐标转换函数来计算标签的坐标。
阅读全文