Qt实现图像自适应窗口大小之scaled()函数使用

2023-11-16

很多应用都需要显示图片,比如视频类应用、拍照类应用,但是在大数情况下用户都会改变窗口大小,以获得最佳效果,在Qt中如果只设置了显示图片而没有对自适应窗口做出设置,用户拖拽边框的时候,整个控件上就会出现大片空白部分,怎么解决这个问题呢?

QImage、QPixmap等绘图设备类都提供scaled()函数,下面是Qt文档对于scaled()函数介绍:

函数原型:

QImage QImage::scaled ( int width, int height, 
Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, 
Qt::TransformationMode transformMode = Qt::FastTransformation ) const

This is an overloaded function.

Returns a copy of the image scaled to a rectangle with the given width and height according to the given aspectRatioMode and transformMode.

If either the width or the height is zero or negative, this function returns a null image.

翻译: 
这是一个重载函数,按照指定的宽和高,根据纵横比模式和转换模式从原有图像返回一个经过比例转换的图像,如果宽高为0,返回一个空图像

所以,获取控件的改变后的宽高,就能设定图像转换的宽高转换比例,用scaled()的返回重新进行绘图即可自适应窗口,以下是个例子:

  1. void Widget::paintEvent(QPaintEvent *) 
  2.  
  3.     QImage img((unsigned char*)im.data,im.cols, 
  4.                    im.rows,QImage::Format_RGB888); 
  5.     QPainter painter(this); 
  6.     if(0==flag) 
  7.         painter.drawImage(0,0,nImg); 
  8.     /* 
  9.         一定要加标记位判断,控件在绘制之前的size为NULL, 
  10.         所以scaled()返回值也为NULL,会提示nImg是空的 
  11.     */ 
  12.     else if(1==flag) 
  13.     { 
  14.         nImg=img.scaled(width(),height()); 
  15.         painter.drawImage(0,0,nImg); 
  16.     } 

Ps:

图像是按比例变化的,如果放大很多,会出现模糊等现象。




FROM:  http://www.linuxidc.com/Linux/2013-03/80210.htm

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt实现图像自适应窗口大小之scaled()函数使用 的相关文章

  • 为什么技术开发者应该读一读《浪潮之巅》

    上周已经阅读完吴军老师的著作 浪潮之巅 第二版 迄今仍然激情澎湃 这本著作以平和直白的笔触介绍了硅谷IT企业们的发展史 看像微软 谷歌 苹果等优秀的IT企业们 从白手起家 到发展壮大成为今天的巨头 再看太阳微系统公司 雅虎公司从创造辉煌 到
  • 关于Eclipse如何改成中文的方法

    从官网下载的Eclipse是英文版的 对于我这种新手来说要上手比较困难 所以需要改成中文版的 咱们首先进入Eclipse语言包的网址 如下图所示进行操作 如图所示 找到对应的版本进入 找到标题为Language Chinese Simpli
  • 常用的正则表达式集锦

    常用的正则表达式集锦 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 4
  • 【FreeRTOS学习计划】 第九节 支持时间片

    FreeRTOS 与隔壁的 RT Thread 和 C OS 一样 都支持时间片的功能 所谓时间片就是同一个优先级下可以有多个任务 每个任务轮流地享有相同的 CPU 时间 享有 CPU 的时间我们叫时间片 在 RTOS 中 最小的时间单位为
  • 随笔:vscode-latex中文配置

    vscode用的久了 感觉确实比texstudio好用 question 1 vscode latex中文配置 vscode安装LaTeX Workshop Extension 默认latexmk就已经可以满足写英文paper的要求了 因为
  • 【STM32】基于STM32F407实现串口通信

    目录 一 通用同步异步收发器 USART 1 USART 简介 2 USART 功能说明 3 USART框图 二 基于HAL库实现串口通信 1 工程创建 2 HAL库UART函数库介绍 3 USART接收与发送 三 总结 四 参考 一 通用
  • vSphere 7.0+Replication 8.3安装配置

    esxi嵌套后建立的VM无法与其它未嵌套的VM通讯 需要更改物理ESXi的网络配置 接受混杂模式 接受mac变更等三个选项 更改kernel网络的配置 勾选vsphere replication 否则配置VM的复制策略时会报错 请验证源主机
  • 嘘!市面上短视频(douyin)“去水印”的工具原来是这样实现的

    现在视频号非常火热 之前在做抖音和快手的人就直接把之前的视频直接搬运过来了 但是从抖音app下载的视频都是带官方水印的 这个是怎么去掉的 哦 不对 他们应该都有保留原视频的吧 但是还有很多人是直接搬运别人的视频的 那他们是怎么去水印的呢 其
  • Cytoscape安装后无法打开

    Cytoscape是一款图形化显示网络并进行分析和编辑的软件 从官网下载了最新的版本 3 7 2 由于Cytoscape需要Java环境才能运行 如果你的电脑还没有Java环境 在安装时最新的3 7 2版本会自动下载并安装Java好环境 自
  • 《深入理解计算机系统》实验二Bomb Lab

    前言 深入理解计算机系统 实验二Bomb Lab的下载和官网文档的机翻请看 深入理解计算机系统 实验二Bomb Lab下载和官方文档机翻 用的调试工具是gdb 用到的指令如下 指令 作用 break 打断点 disassemble 查看汇编
  • Spring Boot中ApplicationRunner与CommandLineRunner

    在实际的开发场景中 经常需要在运行环境之前执行一些类似于读取配置文件 数据库连接操作等 Spring Boot提供了ApplicationRunner和CommandLineRunner来帮助我们实现这些需求 时机 他们执行的时机是为容器启

随机推荐

  • 搜索引擎批量查询控制脚本

    seo的工作需要我们会经常查询gg和百度的结果 收录也好排名也好 所以在做查询脚本时一定要控制查询时间来防止百度封锁禁止你的查询 当然有两种方法 1 不断变换代理 当然代价较大 2 控制查询请求的间隔 3 前两者结合使用 一般的脚本我们从性
  • 利用 MLP(多层感知器)和 RBF(径向基函数)神经网络解决的近似和分类示例问题(Matlab代码实现)

    个人主页 研学社的博客 欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 1 径向基神经网络
  • weixin支付

    前端
  • vue如何通过配置proxy解决跨域问题

    原本在用axios做数据请求的时候我就打算用CORS解决跨域问题 奈何跟我做配合的后端成员用natapp做内网穿透给到的数据接口没有在服务器做CORS跨域需要的相关请求头配置 那这个时候就只能在前端解决跨域问题 在vue中配置代理proxy
  • kdj超卖_今天给大家分享一个(KDJ指标买卖技术)附图解

    KDJ指标买卖技术 KDJ是一个超买超卖指标 对股价高位低位的研判 根据KDJ的取值 我们将KDJ区域分为 1 超买区 K D J这三值在20以下为超卖区 是买入信号 2 超卖区 K D J这三值在80以上为超买区 是卖出信号 3 徘徊区
  • jdbc连接mysql8驱动详解

    当使用 mysql connector java 8 以上版本时 会出现很多问题 下面将给出一些解决方案 jdbc连接通用配置 1 JDBC driver 由 com mysql jdbc Driver 改为 com mysql cj jd
  • pytorch安装包

    https pan baidu com s 1R67Sq7V Pa33oVWRt1iOpQ
  • PostCSS的配置文件

    Vue中使用Vant组件库时 需要使用rem单位 使用了以下两个工具 postcss pxtorem 是一款 postcss 插件 用于将单位转化为 rem lib flexible 用于设置 rem 基准值 在使用PostCSS 时 提供
  • 区块链在供应链领域的应用案例

    案例一 布比物链构建基于区块链的有品质保证且诚信公证的供应链系统 面对众多供应链领域存在的问题 布比基于区块链技术构建了物链 物链充分利用区块链高可信共识 低成本安全 分布式账本和高效链接多中心的特点 整合先进的物联网技术 推出了 品质驱动
  • 环境—虚拟机Ubuntu18的VScode出现XHR:timeout

    解决 Error while fetching extensions XHR timeout VScode改代理 本台虚拟机 测试无效 windows下改host 本台虚拟机 测试无效 windows下改时区服务器 本台虚拟机 测试有效 D
  • 弱口令漏洞与验证码绕过——渗透day04

    目录 一 基于远程服务的弱口令攻击 一 服务暴力破解软件 二 实验 二 基于web的弱口令测试 一 基于表单的暴力破解 二 验证码绕过 on client 1 通过Script Blocker Ultimate插件绕过验证码 2 通过bur
  • Qt封装一个类管理moveToThread( )正确的开启多线程、安全的退出线程的实例

    看本篇的文章基础在于你已经懂得了简单的利用moveToThread的方法创建出一个线程 不会的话可以查看本篇博客 总结 QT 多线程 处理密集时的界面响应保持 运用 MultMoveToThread testObject new MultM
  • 记一次mysql进程无法启动的解决方案

    莫名其妙数据库崩了 试了很多方案启动不了 然后不经意看到 usr local mysql data目录下几个日志文件特别大 删除之后就能重启了 rw rw 1 mysql mysql 4497955 Mar 3 18 29 xxxx php
  • 【Unity Optimize】使用图集(Sprite Atlas)优化项目

    目录 1 图集 Sprite Atlas 介绍 2 创建与配置Sprite Atlas 2 1 创建Sprite Atlas 2 1 1 Unity2D项目 2 1 2 Unity3D项目 2 2 配置Sprite Atlas 2 3 注意
  • PLC接线详解

    PLC常见的输入设备有按钮 行程开关 接近开关 转换开关 拨码器 各种传感器等 输出设备有继电器 接触器 电磁阀等 想学好电气 必须先学会接线 如果线都接不好的话 设备出现问题时 依然是无从下手 正确地连接输入和输出线路 是保证PLC可靠工
  • 射频电路学习之LC振荡电路

    文章目录 前言 一 串联谐振电路 二 并联谐振电路 三 谐振电路的本质 总结 前言 谐振是指 当外力作用的频率与系统固有的振荡频率相同或非常接近时 振幅急剧增大的现象 其中产生谐振时的频率成为谐振频率 谐振是正弦电路中的一种特殊现象 回路也
  • IBM DISK queue_depth参数调整

    queue depth参数会影响disk i o性能 特别是在数据库等i o密集性应用中 适当调整设置此参数 会提高整体应用的性能 下面是在AIX 5 3 IBM ds4300上调整此参数的 步骤及注意事项 记录一下 下面物理磁盘hdisk
  • Windows 11 提升软件打开速度

    设置 gt 辅助功能 gt 视觉效果 gt 动画效果 关闭 设置 gt 辅助功能 gt 视觉效果 gt 透明效果 关闭 设置 gt 应用 gt 启动 都关闭
  • 08-wait 和 sleep 的区别

    1 源码 sleep public class Thread implements Runnable public static native void sleep long var0 throws InterruptedException
  • Qt实现图像自适应窗口大小之scaled()函数使用

    很多应用都需要显示图片 比如视频类应用 拍照类应用 但是在大数情况下用户都会改变窗口大小 以获得最佳效果 在Qt中如果只设置了显示图片而没有对自适应窗口做出设置 用户拖拽边框的时候 整个控件上就会出现大片空白部分 怎么解决这个问题呢 QIm