Возможно ли иметь фильтр событий на QGraphicsItem
? Eventfilter имеет параметр, который дает вам QObject
, но так как QGraphicsItem
не является производным от QObject
, то как это работает?Фильтр событий на QGraphicsItem
ответ
Редактировать: Используйте QGraphicsItem::installSceneEventFilter как предложено в ответе Фрэнк. Пример:
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.
Первое, что пришло мне в голову был такой:
Создайте новый класс, производный от какQGraphicsItem
и QObject
, так как они не имеют никакого отношения (насколько как взгляд на документы говорит мне), у вас должно быть то, что вы хотели.
.... Но потом я посмотрел на документы более внимательно и нашел QGraphicsObject, что, вероятно, именно то, что вы хотите, это даже уже член eventFilter
Нет. Вы не можете установить фильтр событий в QGraphicsItem напрямую, так как это не QObject. Если вы создаете свой собственный QGraphicsItem, наследуйте его от QGraphicsObject, чтобы получить функции QObject.
Одна из возможностей - использовать http://doc.trolltech.com/latest/qgraphicsitem.html#installSceneEventFilter, но он более ограничен, так как для этого требуется, чтобы обработчик тоже был QGraphicsItem.
QGraphicsItem не являются объектами QObject, но они по-прежнему получать события , управляемый их QGraphicsScene. И он также поддерживает фильтрацию событий. QGraphicsItem :: installSceneEventFilter (QGraphicsItem * filterItem) устанавливает другой элемент для приема событий. Переопределите sceneEventFilter() в элементе фильтра, чтобы обработать их. Он работает аналогично QObject :: eventFilter. Важно: элемент, который вы устанавливаете, должен быть добавлен в сцену, чтобы заставить его работать.
Если элемент фильтра должен ничего не делать, кроме фильтра, я думаю, что самый простой способ - извлечь из QGraphicsItem, реализовать paint() ничего не делать, и boundingRect() возвращает пустой прямоугольник. И, конечно, переопределите sceneEventFilter.
Также обратите внимание, что некоторые классы событий изменяются в контексте QGraphicsView, например. QMouseEvent становится QGraphicsSceneMouseEvent, поэтому убедитесь, что вы правильно настроили фильтр.
В случае, если вы подклассифицируете QGraphicsView
, у вас есть возможность просто переопределить любую из многих функций ...Event()
. В таких случаях вам не нужен eventfilter.
Это не связано с вопросом. Он не спрашивал, нужен ли фильтр событий, только если его можно использовать. – Rafe
- 1. Kibana: фильтр событий на сегодня
- 2. install SceneEventFilter on QGraphicsItem
- 3. QMainWindow Установить фильтр событий
- 4. Фильтр событий в QML
- 5. Нарисуйте размеры на QGraphicsItem
- 6. Статический QGraphicsItem на QGraphicsScene
- 7. Как у меня фильтр событий на странице?
- 8. Событие Hover для QGraphicsItem (PyQt4)
- 9. QGraphicsItem и парить событие
- 10. ItemChange не вызывается на qgraphicsItem despites flags
- 11. C++ список указателей на QGraphicsItem
- 12. Как установить непрозрачность на QGraphicsItem
- 13. Фильтр событий Qt скрывает виджет
- 14. QGraphicsItem выбор
- 15. Qt: Force QGraphicsItem обновить
- 16. Фильтр событий xpath не работает
- 17. QGraphicsItem repaint
- 18. Много QGraphicsItem
- 19. Ошибка: C2248: «QGraphicsItem :: QGraphicsItem»: не может получить доступ к закрытому члену, объявленному в классе «QGraphicsItem»
- 20. Как установить фильтр для приемника событий SharePoint?
- 21. QGraphicsItem отмените перерисовывать проблемы
- 22. QGraphicsItem setPos() не запускается
- 23. Пользовательский QGraphicsItem удаляет себя
- 24. Как сделать позицию QGraphicsItem зависимой от другого QGraphicsItem?
- 25. Фильтр событий Mouseover для метки PyQT
- 26. QT Фильтр событий для удержания кнопки мыши
- 27. Найти положение экрана QGraphicsItem
- 28. QGraphicsItem проверка изменения позиции
- 29. NullReferenceException на XtraGrid GridView rowclick событий (Фильтр строке)
- 30. Тип литья сложно QGraphicsItem
Я предлагаю принять это как более релевантный ответ. –