【基于QMediaPlayer的简易视频播放器】— 4、重载QSlider鼠标响应事件,实现单击跳转至任意位置

基于QMediaPlayer的简易视频播放器

  • 1、创建基本布局
  • 2、QMediaPlayer的基本使用
  • 3、结合QSlider实现播放进度控制和音量控制
  • 4、重载QSlider鼠标响应事件,实现单击跳转至任意位置

4、重载QSlider鼠标响应事件,实现单击跳转至任意位置

前面提到,对于点击,QSlider的mousePressEvent()默认的方式是,点击之后跳跃一定的固定距离,无法实现“指哪打哪”。
想要实现单击跳转至任意位置,有两种方案:
1、重载mouseMovedEvent事件;
2、使用事件过滤器eventFilter。
对于后者掌握还不太熟练,而且项目中后续需要用到多个Slider,封装成子类来用会比较方便。所以还是根据 [ 冬南风 的博客 ]通过重载来完成这一功能。

与原博稍有区别,原博采用的方式是重载mouseMovedEvent之后,向父窗口发送自定义事件event type,这样就可以在父窗口中捕获这个事件进行处理。
我的选择是自定义了一个costomSliderClicked信号,在mouseMovedEvent执行时将该信号发出,然后统一用槽函数处理。槽函数的具体写法在上一篇中已经做了介绍。

第一步是给QSlider添加一个子类。在项目窗口中,右击工程的根目录,添加新文件,选择C++ Class,填写基类为QSlider。我这里将其命名为CustomSlider。

custom.h

#ifndef CUSTOMSLIDER_H
#define CUSTOMSLIDER_H
#include <QSlider>
#include <QMouseEvent>
#include <QCoreApplication>

class CustomSlider : public QSlider
{
    Q_OBJECT
public:
    CustomSlider(QWidget *parent = 0) : QSlider(parent)
    {
    }
protected:
    void mousePressEvent(QMouseEvent *ev);//重写QSlider的mousePressEvent事件
signals:
    void costomSliderClicked();//自定义的鼠标单击信号,用于捕获并处理
};

#endif // CUSTOMSLIDER_H

customslider.cpp

#include "customslider.h"

void CustomSlider::mousePressEvent(QMouseEvent *ev)
{
    //注意应先调用父类的鼠标点击处理事件,这样可以不影响拖动的情况
    QSlider::mousePressEvent(ev);
    //获取鼠标的位置,这里并不能直接从ev中取值(因为如果是拖动的话,鼠标开始点击的位置没有意义了)
    double pos = ev->pos().x() / (double)width();
    setValue(pos * (maximum() - minimum()) + minimum());
    //发送自定义的鼠标单击信号
    emit costomSliderClicked();
}

然后,打开Designer,右击slider,选择“提升为”
这里写图片描述

填写继承的子类名,勾选
这里写图片描述

然后在mediaplayer中加入子类的头文件customslider.h,在 [ 第三篇] 中已经介绍了信号槽的连接与槽函数的写法。

至此,一个基于QMediaPlayer的简易视频播放器就完成了,包括了视频播放、进度控制和音量控制等基本功能,并且能很好地支持绝大多数的常见格式。

Qt是一个跨平台的图形用户界面(GUI)开发工具集,可以用来开发各种应用程序,包括音视频播放器。 QMediaPlayerQt中的一个多媒体播放类,可以用来播放音频和视频文件。基于QMediaPlayer,我们可以开发一个功能完善的音视频播放器。 首先,我们可以使用QMediaPlayer提供的功能来实现基本的音视频播放控制,包括播放、暂停、停止、快进、快退等。我们可以通过按钮、菜单或者快捷键来触发相应的操作,或者可以根据用户的输入来实现自动播放和暂停。 其次,我们可以通过QMediaPlayer的信号和槽机制来实现一些附加功能。例如,当播放器播放完一个文件时,我们可以发出一个信号来通知用户,或者自动切换到下一个文件。我们还可以监听播放器的状态变化,例如播放、暂停、停止等,以便更新界面和提供相应的反馈信息。 此外,我们还可以使用QMediaPlayer的媒体查询功能来获取音视频文件的元数据,例如时长、作者、标题等信息,以及获取当前播放位置和进度。我们可以将这些信息显示在界面上,让用户获得更好的使用体验。 除了以上功能,我们还可以使用Qt提供的其他模块来增加更多的特性。例如,我们可以使用Qt Multimedia模块的QAudioProbe来实现音频波形显示,使用Qt MultimediaWidgets模块的QVideoWidget来实现视频播放区域,使用Qt Widgets模块的QSlider实现视频进度条等。 总之,基于QMediaPlayer的开发,我们可以轻松实现一个功能完善的音视频播放器,满足用户对于音视频播放的基本需求,并且具备一定的扩展性,可以根据实际需求进行功能扩展和自定义。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值