我正在使用C++和Qt开发一个图形视图,其中包含许多SVG图像。当我拦截点击事件时,我希望不在SVG项的透明部分接收事件(或者能够忽略它们)。
这可能吗?
SVG文件应该专门为这种用途设计吗?
是否有一些隐藏的Qt选项我还没有听说过?
我正在使用C++和Qt开发一个图形视图,其中包含许多SVG图像。当我拦截点击事件时,我希望不在SVG项的透明部分接收事件(或者能够忽略它们)。
这可能吗?
SVG文件应该专门为这种用途设计吗?
是否有一些隐藏的Qt选项我还没有听说过?
pointer-events
,但默认情况下为visiblePainted
:由于没有其他选择,我只能通过自己的努力找到问题的答案,以下是我的做法:
因此,可悲的答案是:Qt不允许这种行为。
补充其他答案:
重新实现事件时,如果不调用基类事件处理程序来处理默认情况,则会丢失非绘制部分的事件透明度。
例如:
virtual void mouseReleaseEvent( QGraphicsSceneMouseEvent *e) override
{
if (/* any condition*/)
{
// Do some specific behaviour
}
else QGraphicsItem::mouseReleaseEvent(e);
}