我想让鼠标事件到达适当的QGraphicsItem,但它们只能到达QGraphicsView
我已经将代码减少到41行,注释掉了事件处理程序,但没有任何效果。它要么由QGraphicsView处理,如果它有一个处理程序,要么根本不被捕获
我肯定我遗漏了一些明显的东西,但我看不见
from PyQt5.QtWidgets import *
class MyFrame(QGraphicsView):
def __init__(self, parent=None):
super().__init__(parent)
self.setScene(QGraphicsScene())
self.scene().addItem(Group())
def mouseReleaseEvent(self, event):
print('in QGraphicsView')
return QGraphicsView.mouseReleaseEvent(self, event)
class Group(QGraphicsItemGroup):
def __init__(self, parent=None):
super().__init__()
item = MyEllipse(0, 0, 20, 20)
self.addToGroup(item)
def mouseReleaseEvent(self, event):
print('in QGraphicsItemGroup')
return QGraphicsItemGroup.mouseReleaseEvent(self, event)
class MyEllipse(QGraphicsEllipseItem):
def mouseReleaseEvent(self, event):
print('in QGraphicsEllipseItem')
return QGraphicsEllipseItem.mouseReleaseEvent(self, event)
if __name__ == '__main__':
app = QApplication([])
f = MyFrame()
f.show()
app.exec_()
当且仅当
mousePressEvent
处理的事件被接受时调用mouseReleaseEvent
,因此使用以下代码,事件将到达QGraphicsItemGroup
:但正如@ekhumoro所指出的,QGraphicsItemGroup充当单个元素,因此事件不会传输到它们处理的项
如果要检测何时按下项目,可以使用以下方法:
相关问题 更多 >
编程相关推荐