首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QPainterPath成长/扩张

QPainterPath成长/扩张
EN

Stack Overflow用户
提问于 2011-04-20 12:37:26
回答 2查看 3.6K关注 0票数 4

有什么方法可以获得一个QPainterPath并扩展它,比如选择>增长.(或扩大.)在Photoshop的指挥?

我想以从QPainterPath返回的QGraphicsItem::shape作为QGraphicsPathItem的基础。但是我想把形状扩展到给定的数量,比如说周围的10个像素。然后在这个膨胀的形状周围画一个薄薄的轮廓。

我可以通过将用于绘制QPenQGraphicsPathItem的宽度设置为20 (我想要的宽度*2,因为它在内部绘制一半,在外部绘制一半)。这给出了正确的外部形状,但是有一条丑陋的粗线;没有办法(我可以看到)得到这个形状,并用一条细线来勾勒它。

QPainterPathStroker类看起来很有前途,但我似乎无法做到我想做的事情。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-20 14:48:55

QPainterPathStroker是正确的想法:

代码语言:javascript
复制
QPainterPathStroker stroker;
stroker.setWidth(20);
stroker.setJoinStyle(Qt::MiterJoin); // and other adjustments you need
QPainterPath newpath = (stroker.createStroke(oldPath) + oldPath).simplified();

QPainterPath::operator+()合并两个路径,simplified()合并子路径.这也将处理“空洞化”的路径。

票数 5
EN

Stack Overflow用户

发布于 2011-04-20 14:55:58

若要通过QPainterPath像素来生长x,您可以使用一个带有2*x宽笔的QPainterPathStroker,然后将原始的QPainterPathStroker与按下的路径结合起来:

代码语言:javascript
复制
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曲线,这可能不是您想要的。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5730409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档