1

有没有一种简单的方法可以使两个多边形之间的重叠区域透明?最好是 Qt 小部件/Qt 2D 图形C++框架内的内置函数。(不是 QML)

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

例如,一个湖可以有形成多边形的外部通道,以及形成湖内岛屿的多个内部通道。

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

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

白色应该是蓝色的透明区域

我尝试将 QPainterPath 用于外部多边形并调用

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

但结果是一个空白屏幕。

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

QPainterPath 解决方案是否应该工作而我搞砸了?

是否有一些魔法可以使用 QPen/QBrush 来绘制透明的重叠区域?

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

4

1 回答 1

1

看来我搞砸了 QPainterPath 方法。现在可以了。

我让它直接与 QPolygonF 一起工作,因为它有一个类似于 QPainterPath 的减法()方法。然而,在 QPolygonF 中减法的实现留下了工件作为每个内部多边形的起始顶点到外部多边形的起始顶点之间的线。

使用 QPainterPath::addPolygon 并执行减法完美无缺。

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

于 2017-04-18T20:13:46.140 回答