vs2019+Qt实现打开影像并用鼠标滚轮控制图片缩放
admin
2024-02-03 18:51:51

vs2019+Qt实现打开影像并用鼠标滚轮控制图片缩放

之前写了一个博客讲怎么显示一张影像,那个是基于Qpainter的
今天使用QLabel来显示影像,并且用鼠标滚轮控制缩放。
关于图像的打开和显示,主要参考这个博客
关于如何使图片自适应窗口与铺满窗口,可以参考这个博客。
这两个博客出自同一作者,都很详细。
其中按照第二个博客运行后存在的问题是,点了铺满窗口后,再点自适应窗口,图片没有反应。
解决方法:
1.在头文件添加成员变量

    QImage m_image;

2.在InitImage()函数和File_open()两个中将img拷贝到m_image中,即在这两个函数中都添加:

    m_image = img->copy();

3.在fullSize()和autoSize()两个函数中最前面添加

imgLabel->setPixmap(QPixmap::fromImage(m_image));
imgLabel->resize(m_image.width(), m_image.height());

这样每次点击这俩按钮的时候,label的大小都会回到原影像的大小。

接着这个博客,下面主要讲一下如何用鼠标滚轮控制图片缩放。

1.此时打开较大的影像,鼠标滚轮是控制图片上下移动的。因此首先重写 QAbstractScrollArea 类的wheelEvent函数,让它什么都不要做

void QAbstractScrollArea::wheelEvent(QWheelEvent* event)
{return;
}

2.然后实现滚轮控制label放大缩小

void tstQt::wheelEvent(QWheelEvent* event)
{double ratio = (double)m_image.height() / (double)m_image.width();//图像的比例QPoint numDegrees;                                     // 定义指针类型参数numDegrees用于获取滚轮转角numDegrees = event->angleDelta();                      // 获取滚轮转角int step = 0;                                          // 设置中间参数step用于将获取的数值转换成整数型if (!numDegrees.isNull())                              // 判断滚轮是否转动{step = numDegrees.y();                             // 将滚轮转动数值传给中间参数step}event->accept();                                       // 获取事件int currentWidth = imgLabel->width();                  // 获取当前图像的宽int currentHeight = imgLabel->height();               // 获取当前图像的高currentWidth += step;                                  // 对当前图像的高累加currentHeight += (int)(step*ratio);                                 // 对当前图像的宽累加if (step > 0)                                          // 判断图像是放大还是缩小{QString imgsize = QString("图像放大,尺寸为:%1 * %2").arg(currentWidth).arg(currentHeight);qDebug() << imgsize;                               // 打印放大后的图像尺寸}else{QString imgsize = QString("图像缩小,尺寸为:%1 * %2").arg(currentWidth).arg(currentHeight);qDebug() << imgsize;                                // 打印缩小后的图像尺寸}imgLabel->resize(currentWidth, currentHeight);          // 通过更新图像显示控件的大小来更新图像大小
}

这里设置了一个图像比例因子ratio,可以使图像缩放过程中,比例不要失调。
但是如果先点击了铺满窗口在进行缩放,那label的大小就会变成窗口大小,图像比例就会失调。

相关内容

热门资讯

山水皆有情!丽江两山一江的千年... 去过丽江、走过虎跳峡的人,大概率都听过哈巴雪山和金沙江的传说。很多人站在峡谷之下,望着奔腾不息的金沙...
活力中国调研行丨“殷”你而来 ... 9月12日,游客在殷墟博物馆“甲骨文展厅”内参观。位于河南省安阳市的殷墟博物馆新馆是首个全景式展现商...
浦江之夜赴美好相逢,第37届上... 9月12日晚,黄浦江畔灯火璀璨,第37届上海旅游节大巡游在外滩中山东一路上演。不少观众早早便来到外滩...
美丽中国丨秋韵紫鹊界 梯田入画... 这是9月11日拍摄的紫鹊界梯田(无人机照片)。 金秋九月,湖南省娄底市新化县紫鹊界梯田稻谷渐次成熟。...
中国之巅奏响《共同的节日》,千... 千吨阻尼器,“迎世赛、游上海旅游节”。9月13日,由上海市文化和旅游局指导推出上海旅游·会客│巅峰之...