上一期我们实现了播放、暂停、重播、倍速功能,这期来谈谈如何实现鼠标滚轮放大缩小和移动;如果还没看过上期,请移步
【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();
}
文章来源地址https://www.toymoban.com/news/detail-497834.html
感谢观看!!!!
以上就是全部内容,如果对您有帮助,欢迎点赞评论,或者发现有哪里写错的,欢迎指正!
文章来源:https://www.toymoban.com/news/detail-497834.html
到了这里,关于【Qt+FFmpeg】鼠标滚轮放大、缩小、移动——解码播放本地视频(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!