Qt绘图之平移、旋转、缩放
平移
平移是平移QPainter的坐标系的原点,初始位置是在被绘制控件的(0,0)处,即左上角
举例
通过平移循环画三角形,三角形的三个点不用改变,只需要每次平移QPainter,平移其坐标原点,那么画出来三角形也是一样的,只是位置不同,也跟着平移了
QPoint p1(10,10);
QPoint p2(50,10);
QPoint p3(30,90);
for(int x=0;x<ui->label->width();x+=100)
{
//这个for循环就是将整个标签画满,先画第一列,第一列画满后再画第二列,步长都是100
for(int y=0;y<ui->label->height();y+=100)
{
//搭配save函数使用,
//保存painter的初始状态,包括其所在位置(0,0)
painter.save();
//平移painter的坐标原点
painter.translate(x,y);
painter.drawPolygon(QPolygon({p1,p2,p3}));
//搭配restore函数,要和save函数成对出现
//每次平移后回到(0,0)的位置
painter.restore();
}
}
旋转
旋转同样旋转的是QPainter的坐标系
正的度数则顺时针旋转
负的度数则逆时针旋转
举例
画一个三角形后,将其逆时针旋转90度(那么QPainter也要逆时针旋转90度),然后往下平移
QPoint p1(10,10);
QPoint p2(50,10);
QPoint p3(30,90);
painter.drawPolygon(QPolygon({p1,p2,p3}));
//旋转平移后没什么其他操作也可以不用save和restore
painter.save();
//正的度数就是顺时针旋转
//负的度数就是逆时针旋转
//同样也是在旋转QPainter的坐标系
//需要先将QPainter顺时针旋转
painter.rotate(-90);
//沿着旋转后的x轴和y轴方向进行移动
painter.translate(-150,0);
painter.drawPolygon(QPolygon({p1,p2,p3}));
//恢复到旋转之前的状态
painter.restore();
缩放
沿着x轴和y轴进行缩放,不同的轴可以有不同的缩放系数,来产生形变
举例
QPoint p1(10,10);
QPoint p2(50,10);
QPoint p3(30,90);
painter.drawPolygon(QPolygon({p1,p2,p3}));
//缩放后没什么其他操作也可以不用save和restore
//如果还有其他操作save后方便restore到最开始的状态
painter.save();
//参数1:x轴的缩放系数
//参数2:y轴的缩放系数
//即整体同比例缩小为原来的一半
painter.scale(0.5,0.5);
painter.drawPolygon(QPolygon({p1,p2,p3}));
//恢复到旋转之前的状态
painter.restore();