Qt缩放显示图像(使用事件)

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  响应界面变化的事件

Qt实现效果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43376782/article/details/128380536