我想盡量避免浪費時間做一些事情,如果我對QT的知識缺乏可以避免我嘗試。在QT中安裝事件過濾器
假設a有一個類X不是從QGraphicsItems派生的,其中包含幾個QGraphicsItems的字段。我可以在X中定義事件過濾器並將它們安裝在QGraphicsItems中,以便讓X在QGraphicsItems本身之前接收事件? 謝謝。
我想盡量避免浪費時間做一些事情,如果我對QT的知識缺乏可以避免我嘗試。在QT中安裝事件過濾器
假設a有一個類X不是從QGraphicsItems派生的,其中包含幾個QGraphicsItems的字段。我可以在X中定義事件過濾器並將它們安裝在QGraphicsItems中,以便讓X在QGraphicsItems本身之前接收事件? 謝謝。
如果你的設計允許,而不是從QGraphicsItem繼承的對象繼承自QGraphicsObject,這將允許你使用標準的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.
謝謝。它讓我的生活變得更加複雜。我基本上需要一個帶有QGraphicsItems和少量非QT參數的類,其中當鼠標懸停在主QGraphicsItem上時,主QGraphicsItem可以隱藏或穿鞋。 – Francesco
在函數'的QObject :: installEventFilter(QObject的*)'兩個參數和類應該是'QObject's,但'QGraphicsItem'不是一個QObject。我不知道你的X班是什麼。因此,我認爲這是不可能的。 – vahancho
當然,但您想要在實際接收事件的對象上安裝事件過濾器。在Qt中,這些對象必須從'QObject'派生。因此你需要過濾達到'QGraphicsScene'的事件。 –