一、新建一個Qt Gui應用,項目名稱爲myPicture,基類選擇爲QMainWindow,類名設置爲MainWindow。web
二、在mainwindow.h頭文件中添加void paintEvent(QPaintEvent *);繪圖事件函數函數
三、在mainwindow.cpp文件中添加以下代碼段,同時頭文件中添加#include<QPainter>ui
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 }
四、運行結果顯示以下 this
附:圖片伸縮後的寬高設置屬性spa
其中:IgnoreAspectRatio:圖片寬高比適應給定好的矩形大小code
KeepAspectRatio:在給定的矩形中,保持圖片寬高比先後不發生變化orm
KeepAspectRatioByExpanding:圖片寬高比保持不變,但可能超出矩形大小blog
Qt::IgnoreAspectRatio是不保持圖片的寬高比,Qt::KeepAspectRatio是在給定的矩形中保持寬高比,最後一個也是保持寬高比,但可能超出給定的矩形。事件