QT图片缩小放大显示实践
  Y8XIq1u6ceQW 2023年11月19日 16 0

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图片缩小放大显示实践_QT图片缩小放大_04

KeepAspectRatioByExpanding


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

加宽QLabel

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

加高QLabel

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

QT图片缩小放大显示实践_QLabel_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图片缩小放大显示实践_QT图片缩小放大_09


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

Y8XIq1u6ceQW
最新推荐 更多