2017-04-18 133 views
1

是否有一种简单方法可以使两个多边形之间的重叠区域透明?最好在Qt widgets/Qt 2D图形框架中内置函数。 (而不是QML)Qt中重叠多边形的透明度

我正在渲染从Openstreetmap.org提取的地图数据,以及方式(线段)之间的一些高级关系作为形成多边形的内部和外部方式给出。

例如,一个湖可以有形成多边形的外部方式,以及在湖中形成岛屿的几种内部方式。

我能够正确构建外部多边形和内部多边形,但我很难找到一种简单的方法来使与内部多边形重叠的区域透明。

在下图中,白色区域是用白色绘制的单独多边形,但它们应该是湖泊/蓝色多边形的透明区域。

White should be transparent area of blue

我试图用QPainterPath的外多边形和调用

QPainterPath QPainterPath::subtracted(const QPainterPath &inner) const 

但结果却是一个空白屏幕。

我需要在渲染之前自己创建新的多边形吗?

QPainterPath解决方案应该工作,我搞砸了吗?

使用QPen/QBrush绘制重叠区域是否透明可以实现一些魔法吗?

有关如何解决此问题的任何提示,都非常感谢。

+0

这是正确的! – Erro

+0

您所期望的结果与图中显示的一样:https://www.dropbox.com/s/qempjye8155d9iz/Screenshot%20from%202017-04-18%2015-06-02.png?dl=0 – eyllanesc

+0

这是我在http://i.imgur.com/CZMPhQu.png之后的结果。现在就开始工作,并在答案中详细阐述。 – Erro

回答

1

看来我搞砸了QPainterPath方法。它现在有效。

我知道它直接与QPolygonF一起工作,因为它有一个类似于QPainterPath的减法()方法。但是,在QPolygonF中减去的实现会将每个内部多边形的起始顶点与外部多边形的起始顶点之间的行留下伪影。

使用QPainterPath :: addPolygon并执行减法工作完美无瑕。

Ref。 https://bugreports.qt.io/browse/QTBUG-53720 http://www.qtcentre.org/threads/19463-Draw-polygon-with-holes