当前位置: 首页 > article >正文

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


http://www.kler.cn/a/299052.html

相关文章:

  • 推挽输出和开漏输出
  • C++ OpenGL学习笔记(2、绘制橙色三角形绘制、绿色随时间变化的三角形绘制)
  • 【计算机网络2】计算机网络的性能能指标
  • 2024_12_20_生活记录
  • 基于MATLAB的图像增强
  • ubuntu18.04升级到ubuntu20.04
  • Flex布局最后一行元素的对齐的解决方案
  • 《华为 eNSP 模拟器安装教程》
  • Spring Boot详解
  • 组织应在其网络安全策略中考虑MLSecOps吗?
  • LCR 021
  • SpringBoot2:请求处理原理分析-接口方法的返回值处理(returnValueHandlers)
  • Redis 入门 - 五大基础类型及其指令学习
  • 【安卓13 源码】Input子系统(3) - EventHub增加设备的流程
  • C++ | Leetcode C++题解之第398题随机数索引
  • excel无法保存文件
  • 速盾:普通cdn和高防cdn差别在哪里?
  • 小程序事件函数传参
  • 2024版保姆级Anaconda+pycharm安装(中文)及环境配置教程
  • Qt C++ Udp相关知识学习(一)
  • javase复习day22集合进阶
  • tekton pipeline workspaces
  • 从虚拟现实到元宇宙:Facebook引领未来社交的下一步
  • 算法练习题21——卡片(模拟)
  • ubuntu ifconfig只有lo
  • Unexpected token ‘o‘, “[object Obj“... is not valid JSON 报错原因解释