首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QPainterPath在端点关闭曲线子路径

QPainterPath在端点关闭曲线子路径
EN

Stack Overflow用户
提问于 2015-10-10 18:24:33
回答 1查看 2.2K关注 0票数 0

我对QPainterPath有一个问题,因为当我这样做时:

代码语言:javascript
复制
QPainterPath path(start);
path.quadTo(control, end);

QPainter painter;
painter.setBrush(Qt::black);
painter.drawPath(path);

它把曲线下面的区域也画成黑色。使用QPainterPath::closeSubpath()QPainterPath::moveTo(start)会有所帮助。唯一有帮助的是把曲线画回起点,这是愚蠢的,而且有抗锯齿效果,看起来很糟糕。

但这不仅仅是视觉问题。我对QGraphicsItem:: shape ()使用了相同的代码,它实际上会导致项目的形状包含曲线下的区域,这是不可取的。

当前(有以上代码)

所需的(与QPainerPath::quadTo(control, start)一起生产)

注意,由于QPainter绘制了两次--从每个方向绘制一次,所需曲线的坏边。

我在这里做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-10 19:21:48

您所做的错误是您使用了一种有效填充路径的方法,生成了一个形状。

您应该使用void QPainter::strokePath(const QPainterPath & path, const QPen & pen)方法,它只绘制路径笔画。

当然,“绘制路径”听起来确实有点模糊。更糟糕的是,期望QBrush作为一个艺术画笔工作。我想是程序员想出了这些名字,而不是艺术家。

编辑:如果您想得到的是笔画/轮廓的“形状”或几何图形,即QPainter::strokePath()绘制的内容,您可以使用QPainterPathStroker::createStroke(const QPainterPath & path)生成它,然后将QPainter::drawPath()与生成的路径一起使用,这将产生与QPainter::strokePath()相同的结果。

编辑2:我终于得到了你的意图LOL。实际上,在一个画家路径中有“单独的/单独的曲线”是可能的,要么使用子路径,即:

代码语言:javascript
复制
    QPainter p(this);
    QPainterPath p1(QPointF(10,10)), p2(QPointF(50,10)), p3;
    p1.quadTo(QPointF(100,50), QPointF(100,200));
    p2.quadTo(QPointF(150,50), QPointF(150,200));
    p3.addPath(p1);
    p3.addPath(p2);
    p.strokePath(p3, QPen(Qt::black));

简单地说,moveTo()似乎也有效:

代码语言:javascript
复制
    QPainter p(this);
    QPainterPath p1(QPointF(10,10));
    p1.quadTo(QPointF(100,50), QPointF(100,200));
    p1.moveTo(50, 10);
    p1.quadTo(QPointF(150,50), QPointF(150,200));
    p.strokePath(p1, QPen(Qt::black));

在一条路径上,有多条不同的曲线:

似乎不仅视觉输出是一样的,这两种方法也有相同的数字路径元素。然而,正如注释中提到的,对于两个打开的曲线,这些解决方案中没有一个真正产生形状。

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

https://stackoverflow.com/questions/33057475

复制
相关文章

相似问题

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