Как распространить события мыши на QGraphicsItem в QGraphicsItemGroup? - PullRequest
2 голосов
/ 01 марта 2020

Я хочу поймать события мыши для некоторых 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()

1 Ответ

2 голосов
/ 01 марта 2020

Если единственная цель использования QGraphicsItemGroup - включить перемещение группы элементов, то процедура состоит в том, чтобы выбрать элементы, добавить их в группу, переместить элементы и перед любым действием удалить элементы из группы. , Таким образом, не обязательно, чтобы элементы постоянно принадлежали к группе, а только при необходимости, избегая побочных эффектов, таких как непередача событий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...