Установка фильтров событий в QT

Я стараюсь не тратить время на занятие чем-либо, если мое отсутствие знаний о QT может помешать мне даже попробовать.

Предполагается, что класс X не является производным от QGraphicsItems с полями, содержащими среди прочего несколько QGraphicsItems. Могу ли я определить фильтры событий в X и установить их в QGraphicsItems, чтобы позволить X получить событие раньше, чем сами QGraphicsItems? Благодарю.

1 ответ

Решение

Если ваш дизайн позволяет, а не объекты, наследуемые от QGraphicsItem, наследуют от QGraphicsObject, что позволит вам использовать стандартный QObject::installEventFilter.

В противном случае вам понадобится наследовать класс 'X' от QGraphicsItem.

Затем вы можете установить фильтр событий из одного GraphicsItem в другой через QGraphicsScene. Это подробно описано в документации Qt здесь.

Чтобы отфильтровать события другого элемента, установите этот элемент в качестве фильтра событий для другого элемента.

Пример:

 QGraphicsScene scene;
 QGraphicsEllipseItem *ellipse = scene.addEllipse(QRectF(-10, -10, 20, 20));
 QGraphicsLineItem *line = scene.addLine(QLineF(-10, -10, 20, 20));

 line->installSceneEventFilter(ellipse);
 // line's events are filtered by ellipse's sceneEventFilter() function.

 ellipse->installSceneEventFilter(line);
 // ellipse's events are filtered by line's sceneEventFilter() function.
Другие вопросы по тегам