如何在改变窗口组件的情况下改变窗口背景图片的大小,我们通常会使用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 }
备注:如果图片缩放比例较大,最好原始资源图片的分辨率高点,否则会在放大后,出现图片模糊。