我对QPainterPath有一个问题,因为当我这样做时:
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绘制了两次--从每个方向绘制一次,所需曲线的坏边。
我在这里做错什么了?
发布于 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。实际上,在一个画家路径中有“单独的/单独的曲线”是可能的,要么使用子路径,即:
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()似乎也有效:
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));在一条路径上,有多条不同的曲线:

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