3.QT图片完整显示(联机VS2022版)

目录

前言:

技能:

操作:

1.用QPixmap接收图片

2.调整显示

3.进一步调整

参考:


前言:

通过Qlabel结合QPixmap、保持宽高比、缩放、平滑转换的图片显示

项目文件上传至资源demo3


技能:

QPmxmap类读取文件图片

QSize类接收Qlabel大小

scaled( )设置合适显示大小

Qlabel显示QPiaxmap图片

操作:

1.用QPixmap接收图片
QPixmap* pic;
pic= new QPixmap("pic.jpg");
//QPixmap * pic= new QPixmap("qt.jfif");

当然可以直接用合在一起下面的一行代码

至于图片文件,Qlabel支持的格式好像还挺多的,比如我保存的是.jfif格式的也是正常显示

至于文件路径,把文件放在项目同一目录下就可以直接用简单的名字,如果不想把文件复制过来,那就用绝对路径,比如这样

    pic= new QPixmap("C:\\Users\\Administrator\\Desktop\\qt.jfif");
2.调整显示

如果只完成第一步的话已经可以显示图片了,但是很可能因为图片规格和Qlabel不完全融洽导致只能显示图片的一部分,这时候就要调整显示的图片(或者Qlabel)

首先读取Qlabel的大小,然后把pic缩放到Qlabel的大小再显示

 //完整展开一步一步的可以看下面那一版
 QPixmap* pic;
 pic= new QPixmap("qt.jfif");
 QSize size1 = ui.label->size();   
 // 读Qlabel大小
 ui.label->setPixmap(pic->scaled(size1));
 // 设置Pixmap缩放然后显示
//和上面的代码一样,只是分步了
QPixmap* pic;
pic= new QPixmap("qt.jfif");
QSize size1 = ui.label->size();  // 读取大小
*pic=pic->scaled(size1);   //缩放
ui.label->setPixmap(*pic); //显示
3.进一步调整

我发现如果仅仅按第2步,调整的结果是这样的

3.QT图片完整显示(联机VS2022版)_第1张图片

能看出奇怪的地方吗?

它只是分别把宽和高调整了,并没有保持宽高比例,所以图片会变形,查看QT中scaled函数的帮助文档 ,描述的那是相当清楚啦,

QT中scaled函数链接是这个:

(这是在QT里面搞出的的链接,外国的直接点不开,看图片或者去 QT帮助里面自己看文档把)

http://qthelp://org.qt-project.qtgui.6210/qtgui/qpixmap.html#QPixmap

3.QT图片完整显示(联机VS2022版)_第2张图片

其中aspectration表示宽高比,默认ignore忽视,图片表示很形象。

函数完全体是这样的(VS2022中的)

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

我们只需要 改变后面的默认参数成KeepAspect....就可以

至于最后一个参数表示转换的模式,默认快速转换FastTrans....也可以换成平滑的SmoothTrans,

QT中参数介绍在下面 

3.QT图片完整显示(联机VS2022版)_第3张图片

于是,保持宽高比缩放平滑转换的图片显示就有了

QPixmap* pic;
pic= new QPixmap("qt.jfif");
QSize size1 = ui.label->size();
*pic=pic->scaled(size1, Qt::KeepAspectRatio, Qt::SmoothTransformation);
ui.label->setPixmap(*pic);

3.QT图片完整显示(联机VS2022版)_第4张图片

参考:

【Qt学习系列】3.Qt信号与槽

你可能感兴趣的:(QT学习记录与资源提供,qt,开发语言,c++,visualstudio,前端)