最近在用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. HDU 2077 汉诺塔IV 递归 通项公式

    刚刚做的HDU 2064很好找规律, 回忆一下: b[1] = 2; b[n] = b[n-1] *3 + 2; 可得b[n]= 3^n-1 不懂的传送门http://blog.csdn.net/mu ...

  2. iOS ASIHTTPRequest

    ASIHTTPRequest对CFNetwork API进行了封装,并且使用起来非常简单,用Objective-C编写,可以很好的应用在Mac OS X系统和iOS平台的应用程序中.ASIHTTPRe ...

  3. [WASM] Create and Run a Native WebAssembly Function

    In this introduction, we show a simple WebAssembly function that returns the square root of a number ...

  4. spark1.3.1使用基础教程 分类: B8_SPARK 2015-04-28 11:10 1651人阅读 评论(0) 收藏

      spark可以通过交互式命令行及编程两种方式来进行调用: 前者支持scala与python 后者支持scala.python与java 本文参考https://spark.apache.org/d ...

  5. fatal error C1859的有效解决办法

    作者:朱金灿来源:http://blog.csdn.net/clever101 在服务器(操作系统为Widows Server2008)上使用VS C++2008编译工程,总是出现这样一个错误:fat ...

  6. vue-cli3使用vue-svg-loader加载svg

    vue-svg-loader Documentation - FAQ webpack loader that lets you use SVG files as Vue components Micr ...

  7. 7 Best jQuery & JavaScript PDF Viewer plugin with examples

    In this Post we are providing best jQuery PDF viewer plugin & tutorial with examples.Due to popu ...

  8. 【转】HTML5移动端最新兼容问题解决方案

    1.安卓浏览器看背景图片,有些设备会模糊. 用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢? 经过研究,是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显 ...

  9. 基于Maven,Spring+ActiveMQ实现,贴近实际

    本文只实现了Topic,queue改点配置就行了 一.pom依赖 Spring的太长了,具体可以看下面源码里面 <dependency> <groupId>org.apache ...

  10. csdn博客栏目加入微博关注

    大家首先切换到:博客专栏,然后点击"加入专栏".然后直接复制下述代码就能够了: <a href="http://weibo.com/u/3247569660/hom ...