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


    最近在用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

  • 相关阅读:
    【转】Hive Data Manipulation Language
    【转】Vim显示中文乱码
    【转】Twitter算法面试题详解(Java实现)
    【转】判断单链表中是否存在环及查找环的入口点
    【转】SQL语句面试题
    【转】经典的SQL语句面试题
    【转】Java实现折半查找(二分查找)的递归和非递归算法
    【转】[IT综合面试]牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
    【笔试/面试题】中科创达——9.28(持续更新ing)
    百度2014校园招聘笔试题(成都站,软件研发岗)——2014.09.21
  • 原文地址:https://www.cnblogs.com/findumars/p/8001584.html
Copyright © 2020-2023  润新知