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实现效果

在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手写不期而遇

感谢你的打赏,也欢迎一起学习

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值