QGraphicsScene中嵌入QWidget,QWidget又嵌入QLabel,如何获得鼠标点击下的QLabel
时间: 2024-03-03 10:51:47 浏览: 63
可以通过在QLabel上安装事件过滤器来实现获取鼠标点击下的QLabel。
首先,在QGraphicsScene中嵌入QWidget,同时在该QWidget中嵌入QLabel。然后,为QWidget安装事件过滤器,重写eventFilter方法,在该方法中判断事件是否为鼠标点击事件。如果是,则获取事件的位置,转换为在QLabel中的位置,然后通过childAt方法获取该位置下的QLabel,即可得到鼠标点击下的QLabel。
以下是代码示例:
```python
class MyWidget(QWidget):
def __init__(self, parent=None):
super(MyWidget, self).__init__(parent)
self.label = QLabel(self)
self.label.setText("Click me!")
# 安装事件过滤器
self.installEventFilter(self)
def eventFilter(self, obj, event):
if event.type() == QEvent.MouseButtonPress:
pos = event.pos()
label_pos = self.label.pos()
label_rect = self.label.rect()
# 判断事件是否发生在QLabel中
if label_rect.contains(pos - label_pos):
print("QLabel clicked")
return True
return super(MyWidget, self).eventFilter(obj, event)
```
在QGraphicsScene中添加MyWidget即可。
阅读全文