最近在用Qt设计一个小程序,
想让一幅图片自适应窗口大小,因为本人比较笨,一直找不到好方法。
找到了不少方法但都会出一些小问题,
刚刚摸索出解决办法了,在些记录。
小程序
思想:函数
1 显示图像是用QLabel
2 在QWidget或其余窗口部件上显示(也可直接显示在窗口上,后面会说明为何不)
布局
如今问题就明朗了,主要就是调整QLabel大小随窗口大小自动变化。ui
使用方法:.net
1 在要显示的窗口放置一个QWidget,并使用用布局管理器(以便窗口能够规范布局)设计
2 在QWidget内放置QLabel ,位置为左上角,不使用任何布局管理器blog
3 在构造函数内添加以下代码:图片
ui->label->setScaledContents(true);get
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,那么有两种状况:
1、使直接对QLabel使用布局管理器,2、不使用布局管理器。
不使用布局的状况很明显会使窗口布局错乱适应能力着,或者很难得到
窗口真实的大小(我用QDockWidget的大小设定时,当窗口锚接入主窗
口时种是遮盖图像的一部分)。
第一种状况:直接对QLabel使用布局管理器:那么状况是,打开界面
QLabel自动调节为窗口大小,经过拖动使窗口变大后,窗口内有多余的
空间后,布局管理器将QLabel自动放大到窗口大小;
看似实现了自动适应窗口大小,但当咱们想使窗口变小时问题就出来了
,窗口没法缩小,缘由是布局管理器内的QLabel大小是整个窗口,窗口
没已是最小了。
当使用QWidget作中间介质后,因为QWidget内没有布局管理器,因此当
缩小主窗口时其大小能够改变,
而QLabel为从QWidget的(0,0)开始绘制,大小为QWidget大小,因此
能够实现与窗口一样大小,显示位置也是布局管理器设置的位置。
http://blog.csdn.net/yh_1988/article/details/6752733