Я хочу поймать события мыши для некоторых QGraphicsItem
. Когда элемент добавляется непосредственно в QGraphicsScene
, все работает должным образом: при использовании указанного ниже варианта 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()