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();

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值