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

很多应用都需要显示图片,比如视频类应用、拍照类应用,但是在大数情况下用户都会改变窗口大小,

以获得最佳效果,在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()的返回重新进行绘图即可自适应窗口,以下是个例子:

void Widget::paintEvent(QPaintEvent *)
{

    QImage img((unsigned char*)im.data,im.cols,
                   im.rows,QImage::Format_RGB888);
    QPainter painter(this);
    if(0==flag)
        painter.drawImage(0,0,nImg);
    /*
        一定要加标记位判断,控件在绘制之前的size为NULL,
        所以scaled()返回值也为NULL,会提示nImg是空的
    */
    else if(1==flag)
    {
        nImg=img.scaled(width(),height());
        painter.drawImage(0,0,nImg);
    }
}

Ps:

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

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值