Python 如何将鼠标事件传播到QGraphicsSiteMgroup中的QGraphicsItem?

Python 如何将鼠标事件传播到QGraphicsSiteMgroup中的QGraphicsItem?,python,pyqt,pyqt5,qgraphicsitemgroup,Python,Pyqt,Pyqt5,Qgraphicsitemgroup,我想捕捉一些QGraphicsItem的鼠标事件。当该项直接添加到qgraphicscene中时,一切正常:当使用下面的选项1时,当用户在矩形内单击时,控制台将打印“foo” 但是,如果项目是通过组间接添加的,它将不再接收事件(下面的选项2)。看来事件链就这样断了。我试图将scene设置为QGraphicsItem的父对象以恢复链,但结果是错误的,显然我没有正确的方法 向组中添加QGraphicsItem并仍然接收鼠标事件的正确方法是什么 from PyQt5.QtWidgets import

我想捕捉一些
QGraphicsItem
的鼠标事件。当该项直接添加到
qgraphicscene
中时,一切正常:当使用下面的选项1时,当用户在矩形内单击时,控制台将打印“foo”

但是,如果项目是通过组间接添加的,它将不再接收事件(下面的选项2)。看来事件链就这样断了。我试图将
scene
设置为
QGraphicsItem
的父对象以恢复链,但结果是错误的,显然我没有正确的方法

向组中添加
QGraphicsItem
并仍然接收鼠标事件的正确方法是什么

from PyQt5.QtWidgets import QApplication, QGraphicsRectItem, QGraphicsScene, QGraphicsView, QMainWindow


class Rect(QGraphicsRectItem):
  def mousePressEvent(self, event):
    print("foo")


app = QApplication([])
window = QMainWindow()
window.setGeometry(100, 100, 400, 400)
view = QGraphicsView()
scene = QGraphicsScene()

rect = Rect(0, 0, 150, 150)

# Option 1.
# scene.addItem(rect)  # works fine, prints 'foo' when clicked
# Option 2.
group = scene.createItemGroup([rect])  # no mouse event received by rect

view.setScene(scene)
window.setCentralWidget(view)
window.show()
app.exec()

如果使用QGraphicsSiteMgroup的唯一目的是启用项目组的移动,则过程是选择项目,将其添加到组中,移动项目,然后在执行任何操作之前从组中删除项目。因此,项目无需永久属于该组,但只有在必要时才能避免副作用,如事件未传播。

您希望通过该组具体实现什么?这是否回答了您的问题@ypnos setHandlesChildEvents不可用于Qt5@ypnos将项目移动到一起。更准确地说,当您要将多个项目移动到一起时,通常使用鼠标+橡皮键选择这些项目,然后您可以将这些项目添加到组中,然后移动它们,在某个动作可以移除组中的项目之前,也就是说,仅在必要时限制组的动作,因此项目不会受到副作用的影响。事实上,即使在组被销毁后,应用于组的转换仍然存在。谢谢