Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt中重叠多边形的透明度_C++_Qt_Openstreetmap_Qpainterpath_Qpolygon - Fatal编程技术网

C++ Qt中重叠多边形的透明度

C++ Qt中重叠多边形的透明度,c++,qt,openstreetmap,qpainterpath,qpolygon,C++,Qt,Openstreetmap,Qpainterpath,Qpolygon,有没有一种简单的方法可以使两个多边形之间的重叠区域透明?最好是Qt widgets/Qt 2D graphicsC++框架内的内置函数。(不是QML) 我正在渲染从Openstreetmap.org中提取的地图数据,并且给出了一些方式(线段)之间的高级关系,即形成多边形的内部方式和外部方式 例如,一个湖泊可以有形成多边形的外部通道,也可以有几个内部通道在湖泊内形成岛屿 我能够正确地分别构建外部多边形和内部多边形,但我很难找到一种简单的方法使与内部多边形重叠的区域透明 在下图中,白色区域是用白色绘

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

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

例如,一个湖泊可以有形成多边形的外部通道,也可以有几个内部通道在湖泊内形成岛屿

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

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

我尝试对外部多边形使用QPainterPath并调用

QPainterPath QPainterPath::subtracted(const QPainterPath &inner) const
但结果是一个空白屏幕

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

QPainterPath解决方案是否应该工作,而我却把事情搞砸了

使用QPen/QBrush可以将重叠区域绘制为透明区域,这有什么神奇之处吗


任何关于如何实现这一点的提示都将受到高度赞赏

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

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

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

参考文献。

没错!您期望的结果如图所示:这是我想要的结果。现在开始工作了,在回答中详细阐述。