写在前面
用过Qt显示图片的同学就应该会发现,配置起来是真的难受,使用QLabel显示图片容易出现图片显示不全或者是图片太大导致控件被撑的变形,相当的难受。实现图片的自适应显示一般需要使用painterevent来配置页面,对于一些初学者来说配置可能会存在一定的个困难,毕竟脱离了.ui就可能不知道页面该怎么设计了。所以这里我就制作一个可自适应显示图片的控件,只需要将QWidget控件提升为该控件即可实现图片的自适应显示。
直接上代码
头文件
#ifndef MYIMAGE_H
#define MYIMAGE_H
#include <QWidget>
#include <QPainter>
#include <QImage>
//使用painterevent,让图片随widget的大小自适应的调整
class MyImage:public QWidget
{
Q_OBJECT
public:
explicit MyImage(QWidget *parent = nullptr);
~MyImage();
void setImage(QImage image);
protected:
void paintEvent(QPaintEvent *);
private:
QImage image;
};
#endif // MYIMAGE_H
cpp文件
#include "myimage.h"
MyImage::MyImage(QWidget *parent)
{
image.load(":/image.png");
}
MyImage::~MyImage()
{
}
void MyImage::paintEvent(QPaintEvent *)
{
int width=this->width();
int height=this->height();
QPainter painter(this);
painter.save();
//调整图片的大小为窗体的大小
image.scaled(width,height);
//绘制出图片
painter.drawImage(this->rect(),image);
painter.restore();
painter.setRenderHints(QPainter::Antialiasing|QPainter::TextAntialiasing);
// painter.translate(width/2,height/2);
//可以设置成正方形,最小的大小位200*200;
int side =qMin(width,height);
painter.scale(side/200,side/200);
}
void MyImage::setImage(QImage image)
{
this->image=image;
update();
}
如何使用
将以上两个文件添加到项目中(没有.ui文件),在显示界面添加一个QWidget控件,并将QWidget提升为MyImage,后续只需要使用setImage函数就可以刷新图片。