绘图中经常需要绘制多条线段形成的折线,然而要是想用QPainterPath的moveTo和lineTo来实现的话,很容易陷入一个陷阱,绘制出来的结果可能如下:
[img]http://dl2.iteye.com/upload/attachment/0093/0374/34779521-0025-3ad8-92b8-ee89614d4718.jpg[/img]
根本原因在于绘图引擎认为连续的lineTo是用来描绘多边形的,而不是用来描绘折线的,那么当path结束时,就会形成由拐点来描述的多边形。那么怎么用QPainterPath表示折线呢?秘诀就是每两个点就结束一次subPath,具体到代码上就很简单了,如下:
QList<QPointF> points;
points << ... <<... << ... << ... << ... < ...;//这里添加点集
QPainterPath polyline;
polyline.moveTo(points.at(0));
for(int i=1; i<points.size(); ++i)
{
polyline.lineTo(points.at(i));
polyline.moveTo(points.at(i));//关键的一句,用来结束subPath
}
...
//set pen
...
//set brush
...
painter->drawPath(polyline);
[img]http://dl2.iteye.com/upload/attachment/0093/0374/34779521-0025-3ad8-92b8-ee89614d4718.jpg[/img]
根本原因在于绘图引擎认为连续的lineTo是用来描绘多边形的,而不是用来描绘折线的,那么当path结束时,就会形成由拐点来描述的多边形。那么怎么用QPainterPath表示折线呢?秘诀就是每两个点就结束一次subPath,具体到代码上就很简单了,如下:
QList<QPointF> points;
points << ... <<... << ... << ... << ... < ...;//这里添加点集
QPainterPath polyline;
polyline.moveTo(points.at(0));
for(int i=1; i<points.size(); ++i)
{
polyline.lineTo(points.at(i));
polyline.moveTo(points.at(i));//关键的一句,用来结束subPath
}
...
//set pen
...
//set brush
...
painter->drawPath(polyline);