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

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的大小就会变成窗口大小,图像比例就会失调。

相关内容

热门资讯

送了杯西瓜汁给自己喜欢的女孩,... 送了杯西瓜汁给自己喜欢的女孩,她说你怕也不是疯了是什么意思?意思也就是说,这杯西瓜汁呢,女生不愿意接...
你说我不懂爱 还有一句是 如果... 你说我不懂爱 还有一句是 如果你没有这样悄悄默默的走 这是什么歌啊?是郭晓杰的《心痛后明白》吗?
请大家给我介绍好听的歌曲,dj... 请大家给我介绍好听的歌曲,dj也行迈克尔杰克逊
心伤透了是不是就没心了! 心伤透了是不是就没心了!可爱的楼主,当然不是啊。你现在的心,无非是被那个把你的心伤透了的人带走了。如...
仙剑奇侠传3中的主要人物是谁扮... 仙剑奇侠传3中的主要人物是谁扮演的景天——胡歌长卿——霍建华雪见——杨幂紫萱——唐嫣花楹——郭晓婷胡...
夏河洛洛是什么时候开始恋爱的? 夏河洛洛是什么时候开始恋爱的?大概07年吧。在一起近三年,大概推算的
我大话2想玩男人 现在已经两世... 我大话2想玩男人 现在已经两世男魔了 我是平民 接下来怎么转 怎么玩?主要想玩混男人嗯两世男魔转男人...
爱(艾)滋病在空气中生存时间 爱(艾)滋病在空气中生存时间放心吧,爱(艾)滋病在空气中是不能生存的
放羊的星星中所有的歌曲叫什么名... 放羊的星星中所有的歌曲叫什么名字01极速爱情-李雅微02对望-林志颖03paradise-李雅微04...
MAS曳步舞 是什么意思? MAS曳步舞 是什么意思?是一种风格,巴西风格的马来西亚风格
死神是神还是鬼脑筋急转弯 死神是神还是鬼脑筋急转弯鬼。死神是地狱的使者,说他是鬼不恰当,说他是神又没到那境界,但是说白了他就是...
科学练习册(牛津上海版)七年级... 科学练习册(牛津上海版)七年级上第九章电力与电信答案跪求啊~~17~36 D B A C C D C...
加刘三姐对歌歌词 加刘三姐对歌歌词 “男方:什么水面打跟斗呢,什么水面起高楼呢,什么水面撑阳伞,什么水面共白头?刘三姐...
怒与什么什么的成语 怒与什么什么的成语 怒开头的成语:怒不可遏、怒火中烧、怒气冲冲、怒形于色、怒气冲天、怒火冲天、怒...
女孩,姓王,阳历2008年3月... 女孩,姓王,阳历2008年3月7日,出生时间:下午16:52分, 请高人按生辰八字起名!急 急八字:...
NO是表示没有吗? NO是表示没有吗?表示否定的意思,没有,不是,无等等。
有没有盗墓的爱情小说 最好是悲... 有没有盗墓的爱情小说 最好是悲伤的 男主很冷的那种《我不是粽子,是个杯具》言情男主有点像小哥,呆呆冷...
《基础教育研究》和《教育探索》... 《基础教育研究》和《教育探索》这两本杂志哪个好一些?这要看你需要什么了。一个是侧重基础教育应用性。一...
店铺歇业语怎么写 店铺歇业语怎么写快回家过年了…小吃店歇业了…怎么写歇业语新年将至,正味餐饮谨此向大家致以新春的问候,...
不倾城不倾国是什么意思? 不倾城不倾国是什么意思?倾国倾城说的是女人长得好看;不倾国不倾城就是说长得不好看!意思就是长的不好看...