如果我对QT缺乏了解甚至可以避免尝试,我会尽量避免浪费时间做某事。
假设有一个类X不是从QGraphicsItems派生的,其中的字段包含几个QGraphicsItems。我可以在X中定义事件过滤器并将它们安装在QGraphicsItems上,以便让X在QGraphicsItems之前接收事件吗? 感谢。
答案 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.