我正在使用包含相当多svg图像的图形视图(使用C ++和Qt)。我拦截了对它们的点击,但是当鼠标悬停在svg项目的透明部分上时,我不想接收事件(或者能够忽略它们)。
有可能吗?
svg文件应该专门设计用于此类用途吗?
是否有一些隐藏的Qt选项我尚未听说过?
答案 0 :(得分:3)
有一个CSS属性可以应用于SVG元素pointer-events
,但默认值为visiblePainted
:
当'visibility'属性设置为visible并且指针位于“绘制”区域上时,给定元素可以是指针事件的目标元素。如果指针位于绘制区域上方,如果它位于元素的内部(即填充)上,并且“填充”属性具有除非之外的实际值,或者指针位于元素的周长(即,笔划)之上,并且'stroke'属性设置为非none值。
这表明Qt图形视图不支持它。
答案 1 :(得分:2)
别无选择只能找到问题的答案,这就是我所做的:
因此,悲伤的答案是:Qt不允许这样的行为。
答案 2 :(得分:0)
完成其他答案:
重新实现事件时,为默认情况调用基类事件非常重要,否则,非绘制部件的事件透明度将丢失。
E.g。
virtual void mouseReleaseEvent( QGraphicsSceneMouseEvent *e) override
{
if (/* any condition*/)
{
// Do some specific behaviour
}
else QGraphicsItem::mouseReleaseEvent(e);
}