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是在给定的矩形中保持宽高比,最后一个也是保持宽高比,但可能超出给定的矩形。