使用 QPainter 绘制非优雅的碎椭圆

Posted

技术标签:

【中文标题】使用 QPainter 绘制非优雅的碎椭圆【英文标题】:Non-elegant chipped ellipses with QPainter 【发布时间】:2014-01-02 23:01:47 【问题描述】:

我正在围绕一个目标画一个椭圆。然而,椭圆没有连接和优雅。优雅是指它们不光滑。这就是图像周围的椭圆的样子

请注意圆不光滑并且有粗糙度我想让它成为一个光滑的圆/椭圆。关于我如何做到这一点的任何建议?这就是我目前做省略号的方式。

QPainter painter(target);

QPen pen;
pen.setColor(Qt::red);
pen.setWidth(4);
pen.setStyle( Qt::SolidLine);
pen.setCapStyle(Qt::SquareCap);
pen.setJoinStyle(Qt::BevelJoin);
painter.setPen(pen);

QRegion r(QRect(0, 0, 50, 50), QRegion::Ellipse); 
painter.setClipRegion(r);
painter.drawPixmap(0, 0, source);
painter.drawEllipse(QRect(1, 1, 49, 49));

【问题讨论】:

供参考:您说的是“抗锯齿”。 【参考方案1】:

您需要启用抗锯齿功能:

painter.setRenderHint(QPainter::Antialiasing);

【讨论】:

【参考方案2】:

添加调用

painter.setRenderHint(QPainter::Antialiasing)

绘制之前。

另请注意,基于区域的剪辑可能没有抗锯齿,因此您最好只绘制您感兴趣的部分(例如,使用带纹理的 QBrush 绘制椭圆)。 p>

【讨论】:

这实际上是一个更好的答案,至少对于我测试过的 Qt 3.4 而言。剪贴蒙版没有抗锯齿。

以上是关于使用 QPainter 绘制非优雅的碎椭圆的主要内容,如果未能解决你的问题,请参考以下文章

Qt:在子部件上使用 QPainter

利用QPainter绘制各种图形(Shape, Pen 宽带,颜色,风格,Cap,Join,刷子)

Qt动画椭圆沿圆

如何使用canvas绘制椭圆,扩展非chrome浏览器中的ellipse方法

9.4 QPainterPath图形容器介绍

使用 QPainter 在 QWidget 上绘制 QPixmap Rects