Установка фильтров событий в 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.