给定QPainterPath
如何仅在路径的内侧或外侧边缘(或非闭合路径的左侧或右侧)描边路径?
QPainter::strokePath()
使笔沿着路径居中,并导致相同数量的墨水落在两侧。有关所需效果的可视示例,请参阅我所做的图(对于SVG提议,而非功能):
我不介意这是通过某种黑客来完成的,例如将路径本身设置为剪辑区域(用于内部)或反剪辑区域(用于外部)。
这里的目标是用低不透明度填充填充圆角矩形,然后在具有较低不透明度笔划的外部进行描边,以模拟2步“模糊”衰减。如果笔划与填充重叠,则不透明度加倍,破坏效果。由于形状复杂,路径的简单缩放不会很好,即使它可能适用于上面绘制的圆形和矩形。
答案 0 :(得分:6)
你最好的选择可能是QPainterPathStroker
。用它来创建一条路径轮廓的新路径。然后使用QPainterPath操作,如两者之间的交叉或减法:
outsidePath = strokedPath.subtracted(originalPath);
insidePath = strokedPath.intersected(originalPath);
答案 1 :(得分:0)
一种更好的方法是将混合模式设置为CompositionMode_Source
:
QPainter * painter;
painter->setCompositionMode(QPainter::CompositionMode_Source);
painter->setPen(QPen{color, stroke, ...});
painter->setBrush(QBrush{...});
QPainterPath path;
path.moveTo(...);
path.lineTo(...);
...
// No alpha composition issues
painter->fillPath();