qt 图片适应窗口_Qt图片自适应窗口控件大小(使用setScaledContents)

本文介绍了如何在Qt中使图片自适应窗口大小,通过在QWidget中添加QLabel并利用setScaledContents(true)和resize方法,实现窗口尺寸变化时图片的自动缩放。详细步骤包括使用布局管理器、设置QLabel属性以及处理窗口重绘事件。
摘要由CSDN通过智能技术生成

最近在用Qt设计一个小程序,

想让一幅图片自适应窗口大小,由于本人比较笨,一直找不到好方法。

找到了很多方法但都会出一些小问题,

刚刚摸索出解决办法了,在些记录。

思想:

1 显示图像是用QLabel

2 在QWidget或其他窗口部件上显示(也可直接显示在窗口上,后面会说明为什么不)

现在问题就明朗了,主要就是调整QLabel大小随窗口大小自动变化。

使用方法:

1 在要显示的窗口放置一个QWidget,并使用用布局管理器(以便窗口可以规范布局)

2 在QWidget内放置QLabel ,位置为左上角,不使用任何布局管理器

3 在构造函数内添加如下代码:

ui->label->setScaledContents(true);

4 编辑界面重绘函数,加入如下代码:

ui->label->resize(ui->widget->size());

即可。

原理明:

当我们调整窗口使其变化时,paintEvent 函数自动被调用执行,

执行 ui->label->resize(ui->widget->size());语句为:设置label大小为widget大小。

而ui->label->setScaledContents(true);为设置QLabel自动缩放,既:显示图像大

小自动调整为Qlabel大小。

这样就实现了自适应窗口显示图片。

解释问题:

1 为什么不直接在窗口上显示QLabel而多加一个QWidget?

假如我们直接在窗口上显示QLabel,那么有两种情况:

一、使直接对QLabel使用布局管理器,二、不使用布局管理器。

不使用布局的情况很明显会使窗口布局错乱适应能力着,或者很难获得

窗口真实的大小(我用QDockWidget的大小设定时,当窗口锚接入主窗

口时种是遮盖图像的一部分)。

第一种情况:直接对QLabel使用布局管理器:那么情况是,打开界面

QLabel自动调节为窗口大小,通过拖动使窗口变大后,窗口内有多余的

空间后,布局管理器将QLabel自动放大到窗口大小;

看似实现了自动适应窗口大小,但当我们想使窗口变小时问题就出来了

,窗口无法缩小,原因是布局管理器内的QLabel大小是整个窗口,窗口

没已经是最小了。

当使用QWidget做中间介质后,由于QWidget内没有布局管理器,所以当

缩小主窗口时其大小可以改变,

而QLabel为从QWidget的(0,0)开始绘制,大小为QWidget大小,所以

可以实现与窗口同样大小,显示位置也是布局管理器设置的位置。

http://blog.csdn.net/yh_1988/article/details/6752733

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值