我正在一個圖形視圖(使用C++和Qt),其中包含不少svg圖像。我攔截它們的點擊,但是當鼠標懸停在svg項目的透明部分上時,我不想接收事件(或者不能忽略它們)。忽略qgraphicsview中svg圖像透明部分的鼠標事件?
可能嗎?
svg文件應該專門用於這種用途嗎?
是否有一些隱藏的Qt選項我還沒有聽說過?
我正在一個圖形視圖(使用C++和Qt),其中包含不少svg圖像。我攔截它們的點擊,但是當鼠標懸停在svg項目的透明部分上時,我不想接收事件(或者不能忽略它們)。忽略qgraphicsview中svg圖像透明部分的鼠標事件?
可能嗎?
svg文件應該專門用於這種用途嗎?
是否有一些隱藏的Qt選項我還沒有聽說過?
有沒有其他選擇,但要找出艱難地回答我的問題,這裏是我做了什麼:
因此可悲的答案是:Qt不允許這樣的行爲。
有哪些可以應用到SVG元素,pointer-events
CSS屬性,儘管其默認值是visiblePainted
:
給定元素可以爲指針事件的目標元素時,「能見度」屬性設置爲可見並且指針位於「繪製」區域上時。如果指針位於元素的內部(即填充)上方,並且「fill」屬性具有除none之外的實際值,或者該元素位於元素的外圍(即中風)上方, 'stroke'屬性設置爲非none值。
這將表明Qt圖形視圖不支持它。
完成其他答案:
當重新執行事件,它呼籲默認情況下,基類事件是很重要的,如果沒有,則事件的透明度在非油漆部分丟失。
E.g.
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *e) override
{
if (/* any condition*/)
{
// Do some specific behaviour
}
else QGraphicsItem::mouseReleaseEvent(e);
}