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);
如果不想拉伸填充满,可以使用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);
原始大小 | |
IgnoreAspectRatio | |
KeepAspectRatio | |
KeepAspectRatioByExpanding | 加宽QLabel 加高QLabel |
动图测试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();