2011-02-17 89 views
4

我正在一個圖形視圖(使用C++和Qt),其中包含不少svg圖像。我攔截它們的點擊,但是當鼠標懸停在svg項目的透明部分上時,我不想接收事件(或者不能忽略它們)。忽略qgraphicsview中svg圖像透明部分的鼠標事件?

可能嗎?
svg文件應該專門用於這種用途嗎?
是否有一些隱藏的Qt選項我還沒有聽說過?

回答

1

有沒有其他選擇,但要找出艱難地回答我的問題,這裏是我做了什麼:

  • 尋找在QGraphicsSvgItem.cpp mousePressEvent定義。沒有發現。
  • 在QGraphicsItem.cpp(QGraphicsSvgItem的祖先)中查找mousePressEvent定義。該方法存在,但沒有相關的行動可以在那裏找到。
  • 在QGraphicsItem.cpp中查找mousePressEvent調用。發現自己正在閱讀QGraphicsItem :: sceneEvent()的代碼,爲Qt圖形場景分配鼠標事件。似乎沒有任何區分圖形項目的不同區域。

因此可悲的答案是:Qt不允許這樣的行爲。

3

有哪些可以應用到SVG元素,pointer-events CSS屬性,儘管其默認值是visiblePainted

給定元素可以爲指針事件的目標元素時,「能見度」屬性設置爲可見並且指針位於「繪製」區域上時。如果指針位於元素的內部(即填充)上方,並且「fill」屬性具有除none之外的實際值,或者該元素位於元素的外圍(即中風)上方, 'stroke'屬性設置爲非none值。

這將表明Qt圖形視圖不支持它。

0

完成其他答案:

當重新執行事件,它呼籲默認情況下,基類事件是很重要的,如果沒有,則事件的透明度在非油漆部分丟失。

E.g.

virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *e) override 
{ 
    if (/* any condition*/) 
    { 
     // Do some specific behaviour 
    } 
    else QGraphicsItem::mouseReleaseEvent(e); 
}