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