如何在改變窗口組件的情況下改變窗口背景圖片的大小,我們通常會使用Qt自帶的scaled()函數;QImage、QPixmap等繪圖設備類都提供scaled()函數。
scaled()是一個重載函數,按照指定的寬和高,根據縱橫比模式和轉換模式從原有圖像返回一個經過比例轉換的圖像,如果寬高為0,返回一個空圖像
所以,獲取控件的改變后的寬高,就能設定圖像轉換的寬高轉換比例,用scaled()的返回重新進行繪圖即可自適應窗口,以下是個例子:
1 void Widget::paintEvent(QPaintEvent *) 2 { 3
4 QImage img((unsigned char*)im.data,im.cols, 5 im.rows,QImage::Format_RGB888); 6 QPainter painter(this); 7 if(0==flag) 8 painter.drawImage(0,0,nImg); 9 /*
10 一定要加標記位判斷,控件在繪制之前的size為NULL, 11 所以scaled()返回值也為NULL,會提示nImg是空的 12 */
13 else if(1==flag) 14 { 15 nImg=img.scaled(width(),height()); 16 painter.drawImage(0,0,nImg); 17 } 18 }
備注:如果圖片縮放比例較大,最好原始資源圖片的分辨率高點,否則會在放大后,出現圖片模糊。