上一期我们实现了播放、暂停、重播、倍速功能,这期来谈谈如何实现鼠标滚轮放大缩小和移动;如果还没看过上期,请移步

【Qt+FFmpeg】解码播放本地视频(一)_logani的博客-CSDN博客【Qt+FFmpeg】解码播放本地视频(二)——实现播放、暂停、重播、倍速功能_logani的博客-CSDN博客

其实播放视频就是播放一帧一帧的图片,鼠标滚轮放大缩小和移动就是对绘图事件中的图片位置进行操作

实现效果

目录

一、FFmpeg解码流程图

二、滚轮放大、缩小、移动功能实现

1.滚轮放大缩小

(1)需要定义的变量

(2)滚轮事件

(3)绘图事件中设置

2.移动

(1)鼠标点击事件中记录当前鼠标位置

(2)鼠标移动事件

(3)鼠标双击事件

一、FFmpeg解码流程图

二、滚轮放大、缩小、移动功能实现

1.滚轮放大缩小

(1)需要定义的变量

    double factor;//放大缩小的倍数int XPtInterval = 0;    //平移X轴的值int YPtInterval = 0;    //平移Y轴的值bool Pressed;           //鼠标是否被摁压QPoint oldPos;          //旧的鼠标位置setMouseTracking(true);//开启鼠标追踪this->Pressed = false;this->factor = 1.0;this->XPtInterval = 0;  this->YPtInterval = 0; 

(2)滚轮事件

void playVideoWidget::wheelEvent(QWheelEvent *event)//图片放大缩小
{double numDegrees = event->delta() / 8.0;double numSteps = numDegrees / 15.0;factor *= pow(1.1, numSteps);if (factor< 0.07){factor = 0.07;}else if(factor>50){factor = 50;}update();
}

(3)绘图事件中设置

设置放大缩小的倍数,同时进行平移操作

void playVideoWidget::paintEvent(QPaintEvent *)
{QPainter painter(this);if(!this->image.isNull())//如果图片不为空{painter.translate(0+ XPtInterval, 0+ YPtInterval);//进行平移painter.drawImage(QRect(0,0,this->width()*factor,(this->height()-45)*factor),this->image);}
}

2.移动

(1)鼠标点击事件中记录当前鼠标位置

记录鼠标为点击状态

void playVideoWidget::mousePressEvent(QMouseEvent *event)
{oldPos = event->pos();Pressed = true;
}

(2)鼠标移动事件

当鼠标按下时,获取当前鼠标的位置,减去之前位置计算出移动的距离,绘图事件中进行偏移

当鼠标释放时,记录鼠标处于非点击状态

void playVideoWidget::mouseMoveEvent(QMouseEvent *event)//移动
{if(Pressed!=false)//按下鼠标{this->setCursor(Qt::SizeAllCursor);//设置光标QPoint pos = event->pos();int xPtInterval = pos.x() - oldPos.x();//计算移动的距离int yPtInterval = pos.y() - oldPos.y();XPtInterval += xPtInterval;//加上偏移的距离YPtInterval += yPtInterval;oldPos = pos;//更新位置update();}
}void playVideoWidget::mouseReleaseEvent(QMouseEvent *event)//鼠标释放
{Pressed = false;this->setCursor(Qt::ArrowCursor);//设置光标
}

(3)鼠标双击事件

鼠标双击复原为初始状态

void playVideoWidget::mouseDoubleClickEvent(QMouseEvent *event)//双击初始化为开始
{factor=1.0;XPtInterval = 0;YPtInterval = 0;update();
}

感谢观看!!!!

以上就是全部内容,如果对您有帮助,欢迎点赞评论,或者发现有哪里写错的,欢迎指正!

【Qt+FFmpeg】鼠标滚轮放大、缩小、移动——解码播放本地视频(三)相关推荐

  1. Jquery鼠标滚轮放大缩小图片

    使用Jquery鼠标点击图片,划动鼠标滚轮放大缩小图片. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  2. 鼠标滚轮放大/缩小图片

    <img id=pic src=" http://community.csdn.net/images/CSDN_logo.GIF" width=105 height=31 b ...

  3. 鼠标滚轮 放大缩小图片

    js实现鼠标滚轮放大缩小图片 <script>     //放大缩小图片     function   sdZoom(o)   {     var zoom=parseInt(o.styl ...

  4. 【Qt+FFmpeg】解码播放本地视频(二)——实现播放、暂停、重播、倍速功能

    目录 一.FFmpeg解码流程图 二.播放.暂停.重播.倍速功能实现 1.创建播放.重播和倍速按钮 2.设置布局.样式.没有播放完毕前隐藏重播按钮 3.绑定信号槽 4.实现槽函数 (1)暂停和播放 ( ...

  5. LabVIEW操作鼠标滚轮放大/缩小图像

    之前分享过一篇关于LabVIEW采集鼠标.键盘数据的文章:LabVIEW采集鼠标.键盘数据,本篇博文将分享一个关于鼠标滚轮的有意思小技巧:操作鼠标滚轮来放大和缩小图片. 示例效果如下所示: 本示例功能 ...

  6. js实现鼠标滚轮放大缩小页面指定区域(css3 scale)

    一.需求 鼠标滚轮在红色边框区域内向上滚动:绿色边框盒子里所有元素缩小. 鼠标滚轮在红色边框区域内向下滚动:绿色边框盒子里所有元素放大. 点击还原按钮:绿色盒子里所有元素还原为初始值. 二.相关知识点 ...

  7. Python matplotlib绘图,使用鼠标滚轮放大/缩小图像

    思路: 使用fig.canvas.mpl_connect()函数来绑定相关fig的滚轮事件 利用事件event的inaxes属性获取当前鼠标所在坐标系ax 使用get_xlim()函数获取坐标系ax的 ...

  8. 【Pycharm】用鼠标滚轮放大缩小字体

    放大字体 File->Setting->Keymap->搜索"increase"->选第一个"Increase Font Size"并双 ...

  9. Pycharm-用鼠标滚轮放大缩小字体大小

    1,pycharm 字体放大设置: ①,File -> setting -> Keymap ->在搜寻框中输入:increase -> Increase Font Size(双 ...

最新文章

  1. android studio 初次使用Kotlin(环境准备篇)
  2. HTML第八章ppt,html教程第八章(JavaSript核心语言对象).ppt
  3. [消息]C++ Connections 在拉斯维加斯召开年会
  4. 利用Jqurey写一个输入内容增加并且可以删除,上下移动的标签
  5. cuda的global memory介绍
  6. php文件上传前端页面样式,HTML实现美化上传文件样式
  7. Windows 安装 Redis 教程
  8. 持续集成部署Jenkins工作笔记0010---创建工程并配置源码管理
  9. Python——装饰器的学习笔记(legacy)
  10. HttpURLConnection上传文件(图片)小试
  11. linux将分区从目录上卸载,Linux CentOS 硬盘分区、格式化、挂载与卸载
  12. LinearLayout布局问题
  13. Oracle数据库岗位,Oracle数据库岗位职责
  14. 电脑找回,怎么找回电脑上删除的文件_怎么找回电脑删除的文件-win7之家
  15. du命令参数-h/-s
  16. 解决通过硬盘或U盘安装ubuntu server出现无法挂载光盘的问题教程
  17. mfc函数---CFileDialog的用法
  18. 为华生物NH2-PEG2000-MAL氨基聚乙二醇马来酰亚胺的简介及应用
  19. 第三方登录之Github登录篇
  20. scrapy框架开发爬虫实战——采集BOSS直聘信息【爬虫进阶】

热门文章

  1. Boilsoft Video Splitter绿色便携版下载(免序列号)
  2. Mindjet MindManager 2019使用教程:
  3. TIA博途V16上载程序后,在线无法监控程序,监控图标灰色,时间戳不一样如何解决?
  4. 一个获取ip地址的命令详解
  5. [再寄小读者之数学篇](2014-06-23 积分不等式 [中国科学技术大学2013年高等数学B 考研试题])...
  6. TP6(thinkphp6)队列与延时队列
  7. Linux 磁盘阵列、逻辑卷
  8. 机器学习之预测PM2.5项目报告
  9. 查询各科成绩前3和第3的学生(SQL)
  10. 【KNIME案例】对集合进行并交差补等运算