是否可以在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()
函数中的任何一个。在这种情况下,你不需要事件过滤器。
这与问题无关。他没有问过什么时候需要事件过滤器,只有在可以使用事件过滤器的时候。 – Rafe 2017-07-18 15:48:33
- 1. 过滤器触摸事件
- 2. AngularJs过滤器事件?
- 3. Qt QGraphicsScene和QGraphicsItem事件
- 4. QGraphicsItem悬停事件(PyQt4)
- 5. 过滤器“的onchange”“onkeypress事件”
- 6. 事件过滤器的一个动作
- 7. 按事件代码过滤可过滤的筛选器
- 8. 过滤FullCalendar事件
- 9. 过滤事件 - SQL
- 10. 对由Qt5.0事件鼠标点击事件过滤器多次调用过滤
- 11. 通过ByIncludingOnly过滤事件
- 12. Backbone:限制视图上的收集过滤器事件
- 13. Richfaces列过滤器:如何触发介绍键上的事件
- 14. o365图api过滤器复发事件
- 15. 在QT中安装事件过滤器
- 16. 单击事件更改过滤器vue.js
- 17. 过滤器最小化事件
- 18. 安装事件过滤器QAbstractScrollArea
- 19. Logstash事件日志过滤器
- 20. 鼠标事件“点击过滤器”
- 21. log4j2过滤器修改日志事件?
- 22. 创建一个事件过滤器
- 23. 记事本++文件过滤器
- 24. 事件过滤器不能从QScrollArea
- 25. 如何捕获JTable过滤器事件?
- 26. 过滤重复的事件
- 27. 上的QGraphicsItem
- 28. .cap文件上的IP过滤器
- 29. 如何接收QGraphicsItem上的手势事件?
- 30. SQL事件探查器 - 帮助过滤器存储过程
我建议接受这个作为更相关的答案。 – 2014-02-01 05:26:42