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

这篇具有很好参考价值的文章主要介绍了【Qt+FFmpeg】鼠标滚轮放大、缩小、移动——解码播放本地视频(三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

实现效果

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

目录

一、FFmpeg解码流程图

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

1.滚轮放大缩小

(1)需要定义的变量

(2)滚轮事件

(3)绘图事件中设置

2.移动

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

 (2)鼠标移动事件 

(3)鼠标双击事件

一、FFmpeg解码流程图

【Qt+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();
}

 文章来源地址https://www.toymoban.com/news/detail-497834.html

感谢观看!!!!

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

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

 

到了这里,关于【Qt+FFmpeg】鼠标滚轮放大、缩小、移动——解码播放本地视频(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包