Qt5开发视频播放器的项目实践

 更新时间:2023年08月15日 10:01:39   作者:黄宏哲  
Qt对音视频的播放和控制、相机拍摄、收音机等多媒体应用提供了强大的支持,本文主要介绍了Qt5开发视频播放器,具有一定的参考价值,感兴趣的可以了解一下

一、播放器界面UI设计

控件对象名位置(坐标点)对象名称组件名称备注
Widget(0, 0, 809, 572)WidgetQWidget
labellabelQLabel播放窗口
label_2label_2QLabel
voice_controlvoice_controlQSlider音量滑动条
btn_openbtn_openQPushButton打开文件按钮
label_4label_4QLabel
label_ctlabel_ctQLabel
progress_reportprogress_reportMySlider当前播放进度标签
label_all_timelabel_all_timeQLabel视频时长标签
btn_htbtn_htQPushButton后退按钮
btn_qjbtn_qjQPushButton前进按钮
btn_startbtn_startQPushButton播放按钮 / 暂停按钮
btn_fullshowbtn_fullshowQPushButton全屏播放按钮
label_5label_5QLabel显示播放列表文本
listWidgetlistWidgetQListWidget播放列表

效果图如下

二、播放器基本实现

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QMediaPlayer>  //播放器
#include <QVideoWidget>  //播放窗口
#include <QMediaPlaylist>//播放列表
#include <QString>
#include <QFileDialog>//文件窗口
#include <QDebug>
#include <QResizeEvent>
#include <QMouseEvent>
#include <QKeyEvent>
#include <QListWidgetItem>
#include <QObject>
#include <QAbstractEventDispatcher>
#include "globalkeyfilter.h"
namespace Ui
{
class Widget;
}
class QMediaPlayer;
class QMediaPlaylist;
class QVideoWidget;
class Widget : public QWidget
{
    Q_OBJECT
public:
    explicit Widget(QWidget* parent = 0);
    void setget_Alltime(qint64 playtime);//获取视频时长并设置到标签
    void setget_currenttime(qint64 playtime);//获取当时播放位置并设置
    void settimeslider(qint64 playtime);//设置进度条
    void exitFullScreen();  // 退出全屏
    void togglePlayback();  // 暂停/播放
    ~Widget();
private slots:
    void on_btn_open_clicked();//打开音视频
    void on_btn_start_clicked();//播放
    void on_voice_control_valueChanged(int value);//控制声音
    void on_btn_fullshow_clicked();//全屏显示
    void getduration(qint64 playtime);   //获取时间改变信号
    void getposition(qint64 playtime);   //获取当前播放位置
    void on_btn_ht_clicked();//上一个音视频
    void on_btn_qj_clicked();//下一个音视频
    void on_listWidget_doubleClicked(const QModelIndex& index);
private:
    Ui::Widget* ui;
    QStringList         m_strlist;          //文件名列表
    QMediaPlayer*       m_pMediaPlayer;     //播放器
    QVideoWidget*       m_pVideoWidget;     //播放窗口
    QMediaPlaylist*     m_MediaPlaylist;    //播放列表
    QMediaPlayer::State m_state;            //播放状态
    int m_hour;                             //视频总时长
    int m_munete;                           //分钟
    int m_second;                           //秒
    bool m_sliderstate;                     //滑块是否被选中的状态
    int m_slider_crtval;                    //滑块当前值
    GlobalKeyFilter* m_globalKeyFilter;     //  GlobalKeyFilter 类
};
#endif // WIDGET_H

将label组件传入QVideoWidget作为实例化参数,即可获得播放窗口,并通过QMediaPlayer调用setVideoOutput函数,指定为播放器窗口。

三、自定义滑块控件

#ifndef MYSLIDER_H
#define MYSLIDER_H
#include <QMouseEvent>
#include <QSlider>
class MySlider : public QSlider
{
    Q_OBJECT
public:
    explicit MySlider(QWidget* parent = nullptr);
protected:
    void mousePressEvent(QMouseEvent* ev);
    void mouseReleaseEvent(QMouseEvent* ev);
signals:
    void mousepress(int value);
    void mouserelease(int value);
};
#endif // MYSLIDER_H

由于进度条数值和视频时长的单位不统一,需要自定义控件MySlider,监听键盘事件,发送计算得到的视频时长数据到Widget类的匿名槽函数中,完成滑动条功能。

四、全局键盘监听事件

创建一个GlobalKeyFilter类,对widget类向前声明,实现全局的键盘监听。

#include "globalkeyfilter.h"
#include "widget.h"
#include <QKeyEvent>
#include <Windows.h>
GlobalKeyFilter::GlobalKeyFilter(Widget* widget) : m_widget(widget)
{
    qDebug() << "键盘监听事件启动了" << "\n";
}
bool GlobalKeyFilter::nativeEventFilter(const QByteArray& eventType, void* message, long* result)
{
    if (eventType == "windows_generic_MSG")
    {
        MSG* msg = static_cast<MSG*>(message);
        if (msg->message == WM_KEYDOWN)
        {
            int key = msg->wParam;
            // 处理 ESC 键
            if (key == VK_ESCAPE)
            {
                if (m_widget)
                {
                    m_widget->exitFullScreen();
                }
            }
            // 处理空格键
            if (key == VK_SPACE)
            {
                m_widget->togglePlayback();
            }
        }
    }
    // 返回 false 以便继续传递事件
    return false;
}

 到此这篇关于Qt5开发视频播放器的文章就介绍到这了,更多相关Qt5开发视频播放器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言popen函数调用其他进程返回值示例详解

    C语言popen函数调用其他进程返回值示例详解

    这篇文章主要为大家介绍了C语言popen函数调用其他进程返回值示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-09-09
  • C++实现求动态矩阵各元素的和

    C++实现求动态矩阵各元素的和

    这篇文章主要为大家详细介绍了C++实现求动态矩阵各元素的和,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C语言程序设计之指针的应用详解

    C语言程序设计之指针的应用详解

    为了让大家能够更准确的了解C语言中指针的使用,本文为大家准备了四个指针相关的例题,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2022-11-11
  • 详解C语言中条件判断语句if和switch的用法

    详解C语言中条件判断语句if和switch的用法

    这篇文章主要介绍了详解C语言中条件判断语句if和switch的用法,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2016-04-04
  • 常用C/C++预处理指令详解

    常用C/C++预处理指令详解

    预处理指令提供按条件跳过源文件中的节、报告错误和警告条件,以及描绘源代码的不同区域的能力。使用术语“预处理指令”只是为了与 C 和 C++ 编程语言保持一致。在 C# 中没有单独的预处理步骤;预处理指令按词法分析阶段的一部分处理。
    2014-11-11
  • c/c++输出重定向的方法

    c/c++输出重定向的方法

    c/c++输出重定向的方法,需要的朋友可以参考一下
    2013-03-03
  • opencv配置的完整步骤(win10+VS2015+OpenCV3.1.0)

    opencv配置的完整步骤(win10+VS2015+OpenCV3.1.0)

    OpenCV是计算机视觉中经典的专用库,其支持多语言、跨平台,功能强大,这篇文章主要给大家介绍了关于opencv配置(win10+VS2015+OpenCV3.1.0)的相关资料,需要的朋友可以参考下
    2021-06-06
  • 利用C++实现矩阵的相加/相称/转置/求鞍点

    利用C++实现矩阵的相加/相称/转置/求鞍点

    利用C++实现矩阵的相加/相称/转置/求鞍点。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-10-10
  • 基于C++实现去除字符串头尾指定字符功能

    基于C++实现去除字符串头尾指定字符功能

    编程时我们经常需要对字符串进行操作,其中有一项操作就是去除字符串的头(尾)指定的字符,比如空格。本文为大家详细介绍了如何利用C++实现这一效果,需要的可以参考一下
    2022-04-04
  • C++实现ETW进行进程变动监控详解

    C++实现ETW进行进程变动监控详解

    ETW提供了一种对用户层应用程序和内核层驱动创建的事件对象的跟踪记录机制。为开发者提供了一套快速、可靠、通用的一系列事件跟踪特性。本文将利用ETW进行进程变动监控,需要的可以参考一下
    2022-07-07

最新评论