На этом шаге мы рассмотрим особенности организации фильтрации событий.
События можно перехватывать еще до того, как они будут переданы специализированному методу. Для этого в классе графического объекта необходимо переопределить метод sceneEvent(self, <event>). Через параметр <event> здесь будет доступен объект с дополнительной информацией о событии. Тип этого объекта различен для разных типов событий. Внутри метода следует вернуть значение True, если событие обработано, и False - в противном случае. Если вернуть значение True, то специализированный метод (например, mousePressEvent()) выполняться не будет.
Чтобы произвести фильтрацию событий какого-либо объекта, в классе графического объекта необходимо переопределить метод sceneEventFilter(self, <QGraphicsItem>, <event>).
Через параметр <QGraphicsItem> здесь будет доступна ссылка на объект, в котором возникло событие, а через параметр <event> - объект с информацией о самом событии. Тип этого объекта различен для разных типов событий. Внутри метода следует вернуть значение True, если событие обработано, и False - в противном случае. Если вернуть значение True, объект, в котором возникло событие, не получит его.
Указать, события какого объекта фильтруются, позволяют следующие методы класса QGraphicsItem:
На следующем шаге мы рассмотрим обработку изменения состояния объекта.