【发布时间】:2016-12-17 09:09:45
【问题描述】:
我正在使用 QPainter 编写一个应用程序,我需要 QPainter 类中的 cairo_push_group 的模拟来绘制,比如说,一个带有一堆孔的矩形,它们可能相交。
问题是,当我使用“清除”组合模式绘制孔时,我绘制的孔下方的所有内容都会被清除;我想要在我开始绘制复杂形状之前位于孔下方的图像保留下来。换句话说 - 洞下的所有东西都被清除了,而我只想让洞下的所有东西都能被看到。
一种解决方案似乎是使用带有奇数填充选项的QPainterPath(默认选项),但这不适合我,因为在我的应用程序中,孔可能相交,这样两个孔就不会结合(两个孔的交点不是孔)。
另一种解决方案是仅使用QPainterPath::subtracted 方法,但由于某种原因,它会降低多边形的质量(例如,圆形变成具有可数边数的形状)。
另一个解决方案是将我正在绘制的QImage 保存到一个临时的QImage,清除它,绘制我需要的所有内容,然后使用“目标结束”模式再次绘制它,但这似乎是一个非常缓慢且消耗内存的解决方案。
这个问题还有其他解决方案吗?也许 Qt 中有 cairo_push_group 函数的类似物?
【问题讨论】:
标签: c++ qt integration cairo