首页 > 其他分享 >QT图片缩小放大显示实践

QT图片缩小放大显示实践

时间:2023-11-11 22:32:18浏览次数:31  
标签:lb QT res 实践 QMovie 缩小 QPixmap png QLabel

QT图片缩小放大显示实践

在这里使用QLable加载gif或png进行显示测试,图片格式为png可以用QPixmap加载显示,如果格式为gif加载后又想让其动起来,需要用QMovie

静态图片测试

使用QLabel的setScaledContents缩放方法进行测试,看到是整体的拉伸填充满的

QPixmap  png = QPixmap(":res/2.png" );
    QLabel *lb3=ui->label3;
    lb3->setPixmap(png);
    lb3->setScaledContents(true);

    QPixmap  png2 = QPixmap(":res/2.png" );
    QLabel *lb4=ui->label4;
    lb4->setPixmap(png2);
    lb4->setScaledContents(true);

QT图片缩小放大显示实践_QLabel

如果不想拉伸填充满,可以使用QPixmap.scaled根据QLabel.size来进行处理

在QT定义里可以看到

QPixmap scaled(const QSize &s, Qt::AspectRatioMode aspectMode = Qt::IgnoreAspectRatio,
                   Qt::TransformationMode mode = Qt::FastTransformation) const;

缩放模式定义有三种

enum AspectRatioMode {
        IgnoreAspectRatio,
        KeepAspectRatio,
        KeepAspectRatioByExpanding
    };

IgnoreAspectRatio

矩形框有多大,图片就缩放成多大,不限制原图片的长宽比,拉伸填充满

KeepAspectRatio

保持原图片的长宽比,且不超过矩形框的大小

KeepAspectRatioByExpanding

根据矩形框的大小最大缩放图片,特定情况显示不完整

来用代码测试看看效果吧

QPixmap  png = QPixmap(":res/2.png" );
   QLabel *lb=ui->label;
   QSize labelSize = lb->size(); 
   png = png.scaled(labelSize, Qt::IgnoreAspectRatio);
   lb->setPixmap(png);

原始大小

QT图片缩小放大显示实践_QLabel_02

IgnoreAspectRatio

QT图片缩小放大显示实践_QPixmap_03

KeepAspectRatio

QT图片缩小放大显示实践_QLabel_04

KeepAspectRatioByExpanding


QT图片缩小放大显示实践_QLabel_05

加宽QLabel

QT图片缩小放大显示实践_QT图片缩小放大_06

加高QLabel

QT图片缩小放大显示实践_QT图片缩小放大_07

QT图片缩小放大显示实践_QT图片缩小放大_08

动图测试GIF

通过QMovie->setScaledSize或QLabel->setScaledContents都是可以将GIF放大缩小的

QLabel *lb=ui->label;
    QMovie *movie = new QMovie(":res/1.gif", QByteArray(), lb);
   // QMovie *movie = new QMovie(":res/000.png", QByteArray(), lb);
     movie->setScaledSize(lb->size()); // 设置GIF的初始缩放尺寸
    lb->setMovie(movie);
   // lb->setScaledContents(true);
    movie->start();



    QLabel *lb2=ui->label2;
    QMovie *movie2 = new QMovie(":res/1.gif", QByteArray(), lb2);
   // QMovie *movie = new QMovie(":res/000.png", QByteArray(), lb2);
    //// movie2->setScaledSize(lb2->size()); // 设置GIF的初始缩放尺寸
   lb2->setMovie(movie2);
    lb2->setScaledContents(true);
    movie2->start();

QT图片缩小放大显示实践_QPixmap_09


标签:lb,QT,res,实践,QMovie,缩小,QPixmap,png,QLabel
From: https://blog.51cto.com/u_12668715/8320757

相关文章

  • 改善Go语言编程质量的50个有效实践,技能落地总结50个高效Go程序设计技巧
    改善Go语言编程质量的50个有效实践,技能落地总结50个高效Go程序设计技巧 慕课专栏:《改善Go语言编程质量的50个有效实践》Go语言是Google大牛团队(RobertGriesemer、RobPike以及KenThompson)设计的一种静态类型、编译型编程语言,支持垃圾回收和轻量级并发,它于2009年11月诞......
  • pyqt5-自定义函数优化管理组件
    1、介绍pyqt本身提供了诸多的方法和事件特性,可以操作ui组件。对于单一的项目或者说具有个人风格的开发者来说,在此基础上进行整合可以优化代码。整合,这里特指的是ui组件。可能是ui的显示和初始化,也可能是相关的业务代码。2、测试和总结函数中的ui组件可以调用设置值或获取的......
  • pyqt5-自定义类管理组件
    1、直接定义类,类对象作为XxWindowClass的属性,和self.window并列。将self.window的部分组件赋值给自定义类的属性,完成同步。经测试,此时自定义类的对象中可以读取和操作ui组件。但是无法进行事件设置,设置无效。2、解决方法目前有两个解决方法2.1继续1的做法,自定义类的对象与sel......
  • Qt源码解析——元对象系统热身
    关键词:Qt源码QObjectQMetaObject元对象系统属性事件信号槽概述原系列文章地址官方文档第二章内容就是元对象系统,它在介绍里描述到:Qt的元对象系统提供了信号和槽机制(用于对象间的通信)、运行时类型信息和动态属性系统。元对象系统基于三个要素:QObject类为那些可以利......
  • 《软件工程:一种实践方法》读书笔记一
    它把作为一本书按惯例该讲的历史部分形式一下就一段话带过,但是其中一个来自《人月传说》的形象的比喻深深吸引了我的眼球:“……正像一只逃亡的野兽落到泥潭中做垂死的挣扎,越是挣扎,陷得越深,最后无法逃脱灭顶的灾难。……程序设计工作正像这样一个泥潭,……一批批程序员被迫在泥潭中......
  • 国产瀚高数据库简单实践 及 authentication method 13 not supported 错误解决方法
    近几年IT界软硬件“国产化”搞得很密集,给很多公司带来了商机。但是有些公司拿国外的代码改改换个皮肤,就是“自主知识产权”的国产软件,光明正大卖钱,这个有点...,还经常有丑闻露出,譬如某星浏览器、C某-IDE...话不多说,最近有个项目需要国产化改造,业主方推荐了国产数据库---瀚高数据库......
  • GPT最佳实践:五分钟打造你自己的GPT
    前几天OpenAI的MyGPTs栏目还是灰色的,就在今天已经开放使用了。有幸第一时间体验了一把生成自己的GPT,效果着实惊艳!!!我打造的GPT模型我会放到文章末尾,大家感兴趣也可以自己体验一下。打造自己的GPT模型点击CreateaGPT,可以进入到下面这个界面,左侧是一个GPTBuilder的对话框,右边......
  • 14.5-3 - 14.5-7 流量治理实践
    一、超时策略(针对VirtualService)如果访问某个后端的服务非常卡顿,会严重影响到用户体验,所以可以在前端设置一个超时时间,如果超过该时间则直接返回一个错误码(504)而不是一直等待。在前面章节的学习中,我们了解到,天气预报应用中frontend会调用forecast,而forecast会调用recommendation......
  • qt代码积累
    QT自适应电脑分辨率,在main函数中最前端设置如下代码intmain(intargc,char*argv[]){#if(QT_VERSION>QT_VERSION_CHECK(5,6,0))QGuiApplication::setAttribute(Qt::AA_EnableHighDpiScaling);#endifQApplicationa(argc,argv);appapp;returna.ex......
  • 车联网场景中的MQTT协议应用
    基本概念解释MQTT解释MQTT(MessageQueuingTelemetryTransport)是一种轻量级、基于TCP/IP协议栈构建的异步通信,和发布-订阅模式的消息传输协议。适用于资源受限的设备和低带宽、高延迟或不稳定的网络环境。它在物联网应用中广受欢迎,能够实现传感器、执行器和其它设备之间的高效通信......