工作过程中需要用某个控件展示本地图片文件,但又不想图片比例发生变化,导致文件查看时有变形感。因为只是极小一部分内容就直接使用QLable控件来完成此功能。

下面简单介绍一下我个人使用Label展示图片常用方法,若有错误欢迎指正

填充整个控件

ui->imgLable->setPixmap(QPixmap(imgpath));//label 加载图片imgpath
ui->imgLable->setScaledContents(true);    //根据label大小缩放图片
效果:图片填充整个label,且可以随label变化而变化,缺点则会改变图片比例导致有些图片显示不正常
// 根据label宽度等比例缩放图片
ui->imgLable->setPixmap(pix.scaledToWidth(ui->imgLable->width()));// 根据label高度等比例缩放图片
ui->imgLable->setPixmap(pix.scaledToHeight(ui->imgLable->height()));
效果:图片根据指定高度或宽度进行等比例变换,缺点是当label控件为preferred将会导致窗口忽大忽小,友好度较差;

等比例填充

QPixmap pix(imgpath);
int scalHeight = ui->imgLable->height();
int scalWidth = pix.scaledToHeight(scalHeight).width();//根据label高度计算得到控件目标宽度if(ui->imgLable->width() < scalWidth)
{//再次调整,确保图片能够在控件中完整显示scalWidth = ui->imgLable->width();scalHeight = pix.scaledToWidth(scalWidth).height();
}ui->imgLable->setPixmap(pix.scaled(scalWidth,scalHeight,Qt::KeepAspectRatio));

效果:此时图片比例不发生变化,且不会出现忽大忽小的现象。缺点是当主窗口改变大小时label图片大小不随之变化,需要主动做刷新操作;

以上操作还有更简单办法:pix = pix.scaled(ui->imgLable->width(),ui->imgLable->height(),Qt::KeepAspectRatio);ui->imgLable->setPixmap(pix);
注意scale参数AspectRatioMode,此参数用于控制缩放时是否保留原有比例关系:
enum AspectRatioMode {IgnoreAspectRatio,KeepAspectRatio,KeepAspectRatioByExpanding};
查看Qt帮助文档:

计算显示窗大小

int size_w = FIX_WIDTH;//展示框宽
int size_h = FIX_HEIGHT;//展示框高QPixmap pix(imagefile);
int width = pix.width();
int height = pix.height();int scaleWidth = size_w;//最终计算图片宽度
int scalHeight = size_h;//最终计算图片高度if(width > size_w)//图片本身宽度大于展示框宽度,等比例缩放
{scaleWidth = size_w;scalHeight = scaleWidth *height /width;qDebug() << scalHeight << scaleWidth;if(scalHeight > size_h){//缩放后高度大于展示框,根据展示框高度等比例缩放scalHeight = size_h;scaleWidth = scalHeight * width/height;}
}
else if(height > size_h)//图片本身高度大于展示框,等比例缩放
{scalHeight = size_h;scaleWidth = scalHeight * size_w/height;qDebug() << scalHeight << scaleWidth;if(scaleWidth > size_w){scaleWidth = size_w;scalHeight = scaleWidth *height /width;}
}
else
{//符合展示框高度和宽度,可以直接使用
}

QSS风格设置

最近又重新看了下图片缩放这个问题,其实直接通过Qss风格设置可以直接完成窗体图片显示,

打开帮助文档查询索引:Customizing Qt Widgets Using Style Sheets和Qt Style Sheets Reference有相关窗体qss设置详细解释,以下为图片展示部分内容

border-image

图片填充整个boder区域,当图片和窗口大小不一致时主动缩放图片,此时图片原本比例不再考虑;

图 border-image加载图片

background-image

原图不根据窗口大小进行缩放,不足显示区域则主动平铺记载图片

图 background-image加载图片

image

图片填充窗体content区域,且图片只会根据窗口大小进行等比例缩小不会等比例放大。可以和image-position配合使用指定图片展示位置,如:

image-position:center top   图片显示水平方向:中间,垂直方向:靠上;

图 image加载图片

 

Qt 绘制图片自适应窗口大小(QImage,QPixmap,QLabel)相关推荐

  1. html背景图片自适应窗口大小

    html 图片自适应窗口大小 background-size:cover 会把图片拉伸至足够大,但是背景图片有些部分可能显示不全 #bgImg {height: 100%;width: 100%;ba ...

  2. Qt之图片自适应QLabel的大小

    首先说明一点:在Qt中使用label显示图片 使用label显示图片时总是会遇到一个问题:图片不能适应label的大小,因此显示的图片很难看,这里提供一种方法,先看下面的代码: QPixmap *pi ...

  3. qt android图片自适应大小,Qt on Android:怎样适应不同的屏幕尺寸

    使用 Qt 开发的 Android 应用,怎样适应 Android 智能手机各种各样的屏幕尺寸? 说到屏幕尺寸,从 2.8 吋到 8.9 吋的手机屏幕都有,这对程序猿们来讲痛苦可不只一点. Andro ...

  4. qt 图片适应窗口_Qt图片自适应窗口控件大小

    [    如果要改变窗体的大小,它内部的控件一般不随它的变化而变化,内部部件怎么随窗体的大小而改变自身的大小呢?这里我们一般可以对窗口整体进行布局,我们要用到Layout 最近在用Qt设计一个小程序, ...

  5. qt 保存绘制图片时背景变黑_QGraphicsScene绘制背景图片引起的问题

    项目是基于Qt的图形视图框架编写的,现有个需求是要在图形中加入自定义的背景图片.心想不就是个背景图片吗?只要重写drawBackground函数我想怎么画就怎么画啊.于是立马从QGraphicsSce ...

  6. Qt的4个图像类QImage/QPixmap/QBitmap/QPicture 转

    Qt的4个图像类QImage/QPixmap/QBitmap/QPicture 转 (一)QPixmap和QImage的区别 http://www.thisisqt.com/forum/viewthr ...

  7. 【Qt】2D绘图之绘制图片

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 简单绘制图片 04. 平移图片 05. 缩放图片 06. 旋转图片 07. 扭曲图片 08. 附录 01. 概述 Qt提供 ...

  8. [Qt教程] 第15篇 2D绘图(五)绘制图片

    [Qt教程] 第15篇 2D绘图(五)绘制图片 楼主  发表于 2013-5-2 17:59:00 | 查看: 886| 回复: 3 绘制图片 版权声明 该文章原创于Qter开源社区(www.qter ...

  9. QT每日一练day26:绘制图片

    一.第一阶段 发现上述图片没有显示全!!!!! 二.第二阶段 设置宽高比,平滑转换 运行结果(GIF动图): 发现上述图片在数次缩放后会产生失真!!!!! 三.第三阶段 为了避免图像缩放过程中产生失真 ...

最新文章

  1. Oracle 查询今天、昨日、本周、本月和本季度的所有记录
  2. (004) java后台开发之Eclipse(Neon) 版本安装Java EE插件
  3. android 投影仪,不要购买投影仪, 安卓手机投屏很简单, 每个手机都可以
  4. 产品经理读:李善友《产品型社群-互联网思维的本质》
  5. Homework 8 测试计划
  6. spring boot plugin_spring-boot-starter-parent 与 spring-boot-dependencies
  7. CMS sell in customizing
  8. 《Python学习之路 -- 字符串的方法》
  9. android上实现0.5px线条
  10. 我为什么辞去 Netflix 价值 45 万美元的开发工作
  11. [转载]从零开始学习OpenGL ES之五 – 材质
  12. php多条件查询统计,PHP-----多条件查询
  13. 用通俗易懂的方式讲解: GBDT算法及案例(Python 代码)
  14. 我的世界java骷髅马_教萌新如何在我的世界中拥有骷髅马坐骑
  15. 计算机术语翻译在线,拼音翻译在线
  16. sum多个字段的值相加_Excel Sumifs函数多字段多条件求和使用实例
  17. 2.灰尘对计算机的影响,灰尘对电脑有影响不?
  18. excel计数连续负数(正数)
  19. matlab读取img格式文件
  20. StringTokenizer的用法及示例

热门文章

  1. 读书笔记 | 并购创造价值-收购后的整合与组织学习(4)
  2. 快乐8选号软件更新说明
  3. android蓝牙操作
  4. JavaScript中的ParseInt的用法
  5. 七大多用户商城系统特性对比
  6. 推荐一个打印平台,网上打印店推荐哪个
  7. mysql工具都有什么作用是什么_Navicat for MySQL是什么
  8. ElasticSearch学习笔记二 初识Elasticsearch
  9. 转--地球同步轨道、太阳同步轨道知识
  10. OpenCV 图像直方图计算calcHist()