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

Qt图片自适应窗口控件大小(使用setScaledContents)的更多相关文章

  1. Qt中,将以png为格式的图片在按钮控件上显示

    在Qt编程中,我们常常会遇见这样或那样的小问题,这里,我介绍一个将png为格式的图片在按钮控件上显示的小功能. resistanceBtn = new QPushButton(element); re ...

  2. qt 窗口控件自动调整大小

    /******************************************************************** * qt 窗口控件自动调整大小 * * 在写gui的时候,希 ...

  3. winform 控件大小随着窗体自适应

    3个方法: #region 控件缩放变量        double formWidth;//窗体原始宽度        double formHeight;//窗体原始高度        doubl ...

  4. 双缓冲绘图和窗口控件的绘制——ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 .

    双缓冲绘图和窗口控件的绘制 ---ATL ActiveX 窗口控件生成向导绘制代码OnDraw的一个错误 cheungmine 我们通常使用ATL COM组件,生成一个带窗口的ActiveX控件,然后 ...

  5. Android图片轮播控件

    Android广告图片轮播控件,支持无限循环和多种主题,可以灵活设置轮播样式.动画.轮播和切换时间.位置.图片加载框架等! 使用步骤 Step 1.依赖banner Gradle dependenci ...

  6. Qt判断鼠标在控件上

    QT判断鼠标是否在某子窗口控件上方 需要注意的是,子窗口获取geometry,是相对于父窗口的相对位置,QCursor::pos()获取的是鼠标绝对位置,要不将父窗口的相对位置进行换算,要不将鼠标的绝 ...

  7. kendo UI 倒如css 和 js 后 窗口控件上的工具栏图标不显示如何解决

    examples 文档中找到window的例子打开一个 查看其中文件引入 <head>    <title>API</title>    <meta char ...

  8. Android 开发最牛的图片轮播控件,基本什么都包含了。

    Android图片轮播控件  源码下载地址: Android 图片轮播 现在的绝大数app都有banner界面,实现循环播放多个广告图片和手动滑动循环等功能.因为ViewPager并不支持循环翻页, ...

  9. Qt实现表格树控件-自绘树节点虚线

    目录 一.开心一刻 二.自绘树节点? 三.效果展示 四.实现思路 1.可扩展接口 2.函数重写 3.同步左侧表头 五.相关文章 原文链接:Qt实现表格树控件-自绘树节点虚线 一.开心一刻 一程序员第一 ...

随机推荐

  1. UVA 11374 Airport Express SPFA||dijkstra

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  2. 4、qq物联SDK介绍及实例讲解

    1.到QQ物联官网http://iot.open.qq.com中下载软件SDK S3C2440_20161122_1.6.205_r4288.tar.gz注意:在后续大家实际开发过程中,可能你会下载到 ...

  3. 【BZOJ 2754】[SCOI2012]喵星球上的点名

    [链接]h在这里写链接 [题意]     n个人;     由姓和名组成.s1[i]和s2[i];     有m个询问串.     问你第j个询问串,是否为某个人的姓或者名的子串.     如果是的话 ...

  4. css3-12 transform:scale(1.2,1.2)实现移入元素变大特效

    css3-12 transform:scale(1.2,1.2)实现移入元素变大特效 一.总结 一句话总结:transform:scale(1.2,1.2)鼠标移入的时候变大一点点,超出边框的部分隐藏 ...

  5. IDC报告:从IaaS到PaaS,阿里云主导云计算市场

    11月7日,著名国际研究机构IDC发布了2017年上半年中国公共云PaaS市场调研结果,阿里云以27%的份额保持压倒性领先,是第二名的近三倍.结合IDC上一份IaaS市场的报告(阿里云第一,占比47. ...

  6. Unity中做放大镜 效果

    孙广东  2015.8.16 事实上和 小地图都几乎相同了. 还是要借助 还有一个相机 目的: 这篇文章的主要目的是  要给你一个想法  怎样做放大境效果 . 在unity中能够简单的实现放大镜效果啊 ...

  7. JavaScript对象的创建

    原文 简书原文:https://www.jianshu.com/p/6cb1e7b7e379 大纲 前言 1.简单方式创建对象的方法 2.工厂模式创建对象 3.构造函数模式创建对象 4.原型模式创建对 ...

  8. https://github.com/mvf/svn_wfx

    https://github.com/mvf/svn_wfx 2003.net对应的vc是7.0版本.需要更高的. 在哪里可以下载呢 https://www.tjupt.org/没有校外种子 Proj ...

  9. Python数据分析环境和工具

    一.数据分析工作环境 Anaconda: Anaconda(水蟒)是一个科学计算软件发行版,集成了大量常用扩展包的环境,包含了 Python 解释器,conda 包管理工具,以及 NumPy.Pand ...

  10. Android 从硬件到应用:一步一步向上爬 4 -- 使用 JNI 方法调硬件驱动

    Android下,java应用程序通过JNI方法调用硬件抽象层模块,在Android 从硬件到应用:一步一步向上爬 3 -- 硬件抽象层訪问硬件驱动 中我们已经编译好了硬件抽象层模块,以下就要開始为H ...