初识Qt图片显示、平移及旋转

1、新建一个Qt Gui应用,项目名称为myPicture,基类选择为QMainWindow,类名设置为MainWindow。

2、在mainwindow.h头文件中添加void paintEvent(QPaintEvent *);绘图事件函数

3、在mainwindow.cpp文件中添加如下代码段,同时头文件中添加#include<QPainter>

 1 void MainWindow::paintEvent(QPaintEvent *)
 2 {
 3 
 4         QPainter painter(this);
 5         QPixmap pix;
 6         pix.load("../myPicture/top.png");//将图片置于项目的根目录
 7         //图一
 8         painter.drawPixmap(0, 0, 22, 22, pix);//图片尺寸22乘以22,设置大小不一样的话,图片会自动伸缩
 9         //图二
10         painter.translate(100, 100); //将(100, 100)设为坐标原点
11         painter.drawPixmap(0, 0, 22, 22, pix);//图片以(100, 100)为原点
12         //图三
13         qreal width = pix.width(); //获得以前图片的宽
14         qreal height = pix.height();//获得以前图片的高
15         pix = pix.scaled(width*2, height*2, Qt::KeepAspectRatio);//将图片的宽和高都扩大两倍,并且在给定的矩形内保持宽高的比值不变
16         painter.drawPixmap(20, 20,pix);//继续以前面设置好的(100, 100)为坐标原点
17         //图四
18         painter.translate(100, 100); //再次设置新的(100,100)为坐标原点,相对于最开始的坐标原点(0, 0)来说,此处相当于(200, 200)
19         painter.rotate(180); //顺时针旋转90度
20         painter.drawPixmap(0, 0, 22, 22, pix);//注意此处的坐标要写成(0, 0),即在新坐标原点放置旋转后的图片
21         //图五
22         painter.shear(0.5, 0.1); //横向扭曲0.5,纵向扭曲0.1,值越大,扭曲程度越大
23         painter.drawPixmap(-50, -50, 22, 22, pix);//前面设置的反转属性没有更改,实际是将整个坐标系进行了180度反转,因此,向右下方移动为负x负y
24         //图六
25         painter.shear(-0.5, -0.1); //若想后面的图形不再扭曲,要进行前面扭曲的相反设置
26         painter.drawPixmap(-100, -80, 22, 22, pix);//
27 }

4、运行结果显示如下 

附:图片伸缩后的宽高设置属性

其中:IgnoreAspectRatio:图片宽高比适应给定好的矩形大小

     KeepAspectRatio:在给定的矩形中,保持图片宽高比前后不发生变化

     KeepAspectRatioByExpanding:图片宽高比保持不变,但可能超出矩形大小

Qt::IgnoreAspectRatio是不保持图片的宽高比,Qt::KeepAspectRatio是在给定的矩形中保持宽高比,最后一个也是保持宽高比,但可能超出给定的矩形。

原文地址:https://www.cnblogs.com/peter-czhang/p/3380881.html