最近开发产品,涉及到了QT的曲线动态绘制,因为涉及到了图形放大,所以引出了矢量,非矢量绘图的概念。
矢量,就是一条有数学数据组成的线段,矩阵,圆,等一系列图形,在Qt的绘图事件paintEvent加载这样的图形,图形无限缩放也不会失真。
QPainter painter(this);
painter.drawPath(path);
painter.drawRect(rect);
painter.drawPoint(point);
非矢量,修改对图片的像素点数据进行修改,在绘图事件中更新这张图片,就能实现动态的曲线绘制效果,但是因为对图片像素点进行操作,所以不需要保存线段的完整数据,每次修改一部分,就将线段进行重置,使得绘画速度非常快。
void init()
{
image=new QImage(size,QQImage::Format_ARGB32_Premultiplied);
painter=new QPainter(image);
//将painter绑定绘图设备
}
void updateImage(QPointF pt)
{
QPainterPath path;
QPainterPath end;
end=path.currentpostion;
path=QPainterPath();
path.moveTo(end);
path.lineTo(pt);
painter.drawPath(path);
update(path.boundrounding().adjusted(-10,-10,10,10));
}
void paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawImage(0,0,*image);
}