Qt

时间:2017-04-18 18:44:22

标签: c++ qt openstreetmap qpainterpath qpolygon

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

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

例如,湖泊可以有形成多边形的外部通道,以及在湖中形成岛屿的几种内部通道。

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

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

White should be transparent area of blue

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

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

但结果是一个黑屏。

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

QPainterPath解决方案是否有效,我搞砸了什么?

使用QPen / QBrush绘制重叠区域是否可以透明化?

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

1 个答案:

答案 0 :(得分:1)

似乎我搞砸了QPainterPath方法。它现在有效。

我直接使用QPolygonF,因为它有一个类似于QPainterPath的subtracted()方法。但是,在QPolygonF中减去的实现会将每个内部多边形的起始顶点与外部多边形的起始顶点之间的线条留下。

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

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