在QT中安装事件过滤器

时间:2014-04-01 12:01:29

标签: qt events

如果我对QT缺乏了解甚至可以避免尝试,我会尽量避免浪费时间做某事。

假设有一个类X不是从QGraphicsItems派生的,其中的字段包含几个QGraphicsItems。我可以在X中定义事件过滤器并将它们安装在QGraphicsItems上,以便让X在QGraphicsItems之前接收事件吗? 感谢。

1 个答案:

答案 0 :(得分:0)

如果您的设计允许继承自QGraphicsObject而不是继承自QGraphicsItem的对象,那么将允许您使用标准的QObject :: installEventFilter。

否则,您需要从QGraphicsItem继承类'X'。

然后,您可以通过QGraphicsScene从一个GraphicsItem安装事件过滤器。详情请见the Qt Documentation here

  

要过滤其他项目的事件,请将此项目安装为其他项目的事件过滤器。

示例:

 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.