Qt缩放显示图像实现思路
1.使用滚轮事件,实时更新源图像赋值给changeImage;
2.设置一个缩放比例,通过判断滚轮的变化,实时更新缩放比例;
头文件
#include <QWheelEvent>
源代码
class ImageWidget:public QWidget
{
Q_OBJECT
public:
ImageWidget(QWidget *parent = Q_NULLPTR);
~ImageWidget();
//槽函数
private slots:
void on_openImageBtn();
void on_resetImageBtn();
private:
Ui::ImageWidget ui;
//事件类函数
protected:
virtual void wheelEvent(QWheelEvent *event) override; //滚轮事件
public:
//上述所有的事件只是为了更改如下的变量
QPixmap srcImage,changeImage; //原始图像以及缩放后的图像
float ratio = 1.0; //缩放的比例
}
CPP文件
//绑定信号槽
connect(ui.ui_openImageBtn,&QPushButton::clicked,this,&ImageWidget::on_openImageBtn);
connect(ui.ui_resetImageBtn,&QPushButton::clicked,this,&ImageWidget::on_resetImageBtn);
//读取图像
void ImageWidget::on_openImageBtn()
{
//设置label为居中显式
ui.ui_imageLabel->setAlignment(Qt::AlignCenter);
//读取并显示图像
QImage image("src/11.jpg");
image = image.scaled(ui.ui_imageLabel->size(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation);
srcImage = QPixmap::fromImage(image);
//重绘
ui.ui_imageLabel->setPixmap(srcImage);
}
//恢复原图
void ImageWidget::on_resetImageBtn()
{
ratio = 1;//恢复原始比例
//重绘
ui.ui_imageLabel->setPixmap(srcImage);
}
#pragma region 响应界面变化的事件
//滚轮事件
void ImageWidget::wheelEvent(QWheelEvent *event)
{
//当滚轮远离使用者时:
if(event->delta()>0)
{
ratio = ratio*1.2;//在当前的比例基础上乘以1.2
}
else if(event->delta()<0)
{
ratio = ratio*0.8;//在当前的比例基础上乘以0.8
}
else
{
//不移动鼠标滚轮,什么都不做
ratio = ratio*1;//在当前的比例不变
}
int w = ratio*srcImage.width(); //显示宽度
int h = ratio*srcImage.height(); //显示高度
changeImage = srcImage.scaled(w,h); //图像缩放到指定高度和宽度,保持长宽比例
ui.ui_imageLabel->setPixmap(changeImage);
}
#pragma endregion 响应界面变化的事件