Qt实现图像自适应窗口大小之scaled()函数使用

转载 2015年11月21日 15:10:20

很多应用都需要显示图片,比如视频类应用、拍照类应用,但是在大数情况下用户都会改变窗口大小,以获得最佳效果,在Qt中如果只设置了显示图片而没有对自适应窗口做出设置,用户拖拽边框的时候,整个控件上就会出现大片空白部分,怎么解决这个问题呢?

QImage、QPixmap等绘图设备类都提供scaled()函数,下面是Qt文档对于scaled()函数介绍:

函数原型:

QImage QImage::scaled ( int width, int height, 
Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, 
Qt::TransformationMode transformMode = Qt::FastTransformation ) const

This is an overloaded function.

Returns a copy of the image scaled to a rectangle with the given width and height according to the given aspectRatioMode and transformMode.

If either the width or the height is zero or negative, this function returns a null image.

翻译: 
这是一个重载函数,按照指定的宽和高,根据纵横比模式和转换模式从原有图像返回一个经过比例转换的图像,如果宽高为0,返回一个空图像

所以,获取控件的改变后的宽高,就能设定图像转换的宽高转换比例,用scaled()的返回重新进行绘图即可自适应窗口,以下是个例子:

  1. void Widget::paintEvent(QPaintEvent *) 
  2.  
  3.     QImage img((unsigned char*)im.data,im.cols, 
  4.                    im.rows,QImage::Format_RGB888); 
  5.     QPainter painter(this); 
  6.     if(0==flag) 
  7.         painter.drawImage(0,0,nImg); 
  8.     /* 
  9.         一定要加标记位判断,控件在绘制之前的size为NULL, 
  10.         所以scaled()返回值也为NULL,会提示nImg是空的 
  11.     */ 
  12.     else if(1==flag) 
  13.     { 
  14.         nImg=img.scaled(width(),height()); 
  15.         painter.drawImage(0,0,nImg); 
  16.     } 

Ps:

图像是按比例变化的,如果放大很多,会出现模糊等现象。




FROM:  http://www.linuxidc.com/Linux/2013-03/80210.htm

Qt学习笔记之图片显示(自动调整大小适应设计的范围)

//在Qt中我们通常要在界面显示一些图片,但图片的大小又不可控,都希望图片在自己设计的固定大小的位置显示 //一般在Qt中我们使用Lable显示图片 QImage image; ...
  • kabuto_hui
  • kabuto_hui
  • 2016年05月22日 17:52
  • 4010

QImage:scaled: Image is a null image,

图片路径和图片名不能有中文
  • qq_22424571
  • qq_22424571
  • 2015年04月09日 08:49
  • 1921

Qt实现图像自适应窗口大小之scaled()函数使用

很多应用都需要显示图片,比如视频类应用、拍照类应用,但是在大数情况下用户都会改变窗口大小, 以获得最佳效果,在Qt中如果只设置了显示图片而没有对自适应窗口做出设置,用户拖拽边框的时候, 整个控...
  • huang8579
  • huang8579
  • 2012年12月27日 12:50
  • 5207

自学QT之图片操作(缩放、平移、扭曲和旋转等)

首先呢,我是把图片画在widget上面的,代码自然也要写在paintevent里面。 注意,添加图片时候要记得执行qmake一下,不然图片不能正常执行哦。 1.首先是图片的显示: void ...
  • xuancailinggan
  • xuancailinggan
  • 2016年01月17日 23:34
  • 4606

QImage 大小缩放

项目中需要把图片缩放至QLabel的大小,一直纠结。。。。 经过繁多的试验後,终于发现成功的方法了: QImage newImg = image.scaled(Label-...
  • DipsyHo
  • DipsyHo
  • 2014年02月28日 15:16
  • 3659

Qt 常用类 (7)—— QPixmap

QPixmap 类代表图像,实现在 QtGui 共享库中。       构造       以下构造函数生成的 QPixmap 对象为空图像: QPixmap(); // 构造一个大小为 ...
  • HMSIWTV
  • HMSIWTV
  • 2012年05月12日 19:22
  • 26343

Qt图片自适应窗口控件大小

Qt图片自适应窗口控件大小 思想: 1 用QLabel显示图像 2 在QWidget或其他窗口部件上显示 使用方法: 1 在要显示的窗口UI放置一个Widget,我设置大小为256...
  • dreamtdp
  • dreamtdp
  • 2013年05月01日 20:50
  • 8315

Qt Designer生成的图形可以自适应窗口的大小变化

前言Qt Designer是用来编辑Qt Widget Application图形界面的, Qt Qucik Designer是用来Qt Qucik Application图形界面的 Qt Q...
  • zzti_erlie
  • zzti_erlie
  • 2016年10月26日 09:32
  • 4785

QT实现图片的缩放

实现图片的缩放 我们可以使用QPixmap类中的scaled()函数来实现图片的放大和缩小。 例如: void Dialog::paintEvent(QPaintEvent *) {    ...
  • zx7415963
  • zx7415963
  • 2015年12月17日 13:58
  • 610

Qt打开图片,维持原宽高比,适应窗口

Qt使用QImage打开图片,图片大小超出窗口显示范围,对图片进行缩小显示,缩小时维持图片的原比例,使宽或高其中的一个等于显示控件的宽或高,且全部显示在可显示范围 内;如果图片原宽和高的比例等于显示控...
  • tianyuzhixina
  • tianyuzhixina
  • 2017年07月10日 16:45
  • 320
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt实现图像自适应窗口大小之scaled()函数使用
举报原因:
原因补充:

(最多只允许输入30个字)