有什么方法可以获得一个QPainterPath并扩展它,比如选择>增长.(或扩大.)在Photoshop的指挥?
我想以从QPainterPath返回的QGraphicsItem::shape作为QGraphicsPathItem的基础。但是我想把形状扩展到给定的数量,比如说周围的10个像素。然后在这个膨胀的形状周围画一个薄薄的轮廓。
我可以通过将用于绘制QPen的QGraphicsPathItem的宽度设置为20 (我想要的宽度*2,因为它在内部绘制一半,在外部绘制一半)。这给出了正确的外部形状,但是有一条丑陋的粗线;没有办法(我可以看到)得到这个形状,并用一条细线来勾勒它。
QPainterPathStroker类看起来很有前途,但我似乎无法做到我想做的事情。
发布于 2011-04-20 14:48:55
QPainterPathStroker是正确的想法:
QPainterPathStroker stroker;
stroker.setWidth(20);
stroker.setJoinStyle(Qt::MiterJoin); // and other adjustments you need
QPainterPath newpath = (stroker.createStroke(oldPath) + oldPath).simplified();QPainterPath::operator+()合并两个路径,simplified()合并子路径.这也将处理“空洞化”的路径。
发布于 2011-04-20 14:55:58
若要通过QPainterPath像素来生长x,您可以使用一个带有2*x宽笔的QPainterPathStroker,然后将原始的QPainterPathStroker与按下的路径结合起来:
QPainterPath grow( const QPainterPath & pp, int amount ) {
QPainterPathStroker stroker;
stroker.setWidth( 2 * amount );
const QPainterPath stroked = stroker.createStroke( pp );
return stroked.united( pp );
}但是,请注意,由于Qt4.7,函数 (和类似的集合操作)将路径转换为多行,以绕过路径交集代码中的数值不稳定性。虽然这可以用来绘制(这两个方法之间不应该有任何明显的差异),但是如果您打算保留QPainterPath,例如允许对它进行进一步的操作(您提到了Photoshop),那么它将破坏它中的所有bezier曲线,这可能不是您想要的。
https://stackoverflow.com/questions/5730409
复制相似问题