2014-04-01 40 views
0

我想盡量避免浪費時間做一些事情,如果我對QT的知識缺乏可以避免我嘗試。在QT中安裝事件過濾器

假設a有一個類X不是從QGraphicsItems派生的,其中包含幾個QGraphicsItems的字段。我可以在X中定義事件過濾器並將它們安裝在QGraphicsItems中,以便讓X在QGraphicsItems本身之前接收事件? 謝謝。

+0

在函數'的QObject :: installEventFilter(QObject的*)'兩個參數和類應該是'QObject's,但'QGraphicsItem'不是一個QObject。我不知道你的X班是什麼。因此,我認爲這是不可能的。 – vahancho

+0

當然,但您想要在實際接收事件的對象上安裝事件過濾器。在Qt中,這些對象必須從'QObject'派生。因此你需要過濾達到'QGraphicsScene'的事件。 –

回答

0

如果你的設計允許,而不是從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. 
+0

謝謝。它讓我的生活變得更加複雜。我基本上需要一個帶有QGraphicsItems和少量非QT參數的類,其中當鼠標懸停在主QGraphicsItem上時,主QGraphicsItem可以隱藏或穿鞋。 – Francesco