Qt 实现画线笔锋效果详细原理及示例代码

2020-04-08 12:02:03丽君

什么是补点,就是说我们需要在连接处 根据最新path的线条路径来绘制一系列的点进行填充,使其连接处看起来平滑,图示如下:

上面的圈圈就是补充的点,点与点之间距离越小,看起来就越平滑,而圈圈的圆心点是跟随最新的path线条走的,就是path线的线条高度的中心点,圈圈的半径大小逐渐变小。

再看看补充点后的效果:

可以看到,笔尖黑色的地方线条就是通过补充点来实现的。

那么,问题来了,如何知道最后这条path的路径呢?
其实Qt已经提供了接口,我们通过QPainterPath来生成的曲线,这个类提供了一个函数叫pointAtPercent,定义如下:

这个接口就是返回在path曲线上的坐标点,通过传入百分比来调用,很方便了吧。
我这里的补充点实现方式,就是通过循环的不断的绘制:

//在两个path连接处绘制补充点,使其连接处平滑
void WbCanvasItem::drawPatchPoint(QPainter * painter,QPainterPath path)
{
 qreal temp = (PENWIDTH-3)/100.;
 int k = 0;
 for (qreal i = 0;i < 1; i+=0.01) {
  k++;
  painter->setPen(QPen(Qt::black,PENWIDTH-temp*k, 
        Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
  painter->drawPoint(path.pointAtPercent(i));
 }
}

前三步骤代码:

QPainterPath lastPath = obj->StrokeLastPath(PENWIDTH);
m_pRealPainter->fillPath(lastPath,Qt::red);//填充轮廓
path = obj->StrokePath(3);
m_pRealPainter->fillPath(path,Qt::red);//填充轮廓
drawPatchPoint(m_pRealPainter,obj->path());

ok ,整个实现方式已介绍完成,本文主要讲解原理,代码未整理,就不上传了,用到的关键函数已经介绍过,只要明白原理过后,根据原理一步步的操作,就可以实现了。

Qt 实现钢笔画线效果详细原理

到此这篇关于Qt 实现画线笔锋效果详细原理及示例代码的文章就介绍到这了,更多相关Qt 画线笔锋效果内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!