iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >基于Qt实现视频播放器的制作
  • 377
分享到

基于Qt实现视频播放器的制作

Qt实现视频播放器Qt视频播放器Qt视频播放 2022-12-08 20:12:14 377人浏览 安东尼
摘要

本篇博客介绍如何利用qMediaPlayer和qvideowidget实现视频文件(avi,mp4….)的播放,并且提供进度显示,还可以通过拖动进度条来变换播放位置。

本篇博客介绍如何利用qMediaPlayer和qvideowidget实现视频文件(avi,mp4….)的播放,并且提供进度显示,还可以通过拖动进度条来变换播放位置。

pro文件:

#-------------------------------------------------
#
#
#-------------------------------------------------
 
Qt       += core gui multimedia multimediawidgets
 
greaterThan(QT_MAJOR_VERSioN, 4): QT += widgets
 
TARGET = VideoPlayer
TEMPLATE = app
 
 
SOURCES += main.cpp \
    videoplayer.cpp \
    playerslider.cpp
HEADERS  += \
    videoplayer.h \
    playerslider.h
FORMS    += \
    videoplayer.ui

main.cpp

#include "videoplayer.h"
#include <QApplication>
 
int main(int arGC, char *argv[])
{
    QApplication a(argc, argv);
    VideoPlayer w;
    w.show();
 
    return a.exec();
}

VideoPlayer是我定义的播放器窗体类。它包括一个QMediaplayer,一个QVideoWidget,一个播放按钮,一个停止按钮,一个载入按钮,和进度条PlayerSlider。

VideoPlayer的ui文件外观如图:

这里面的PlayerSlider继承自QSlider,行为定义如下:

#ifndef PLAYERSLIDER_H
#define PLAYERSLIDER_H
 
#include <QSlider>
#include <QMouseEvent>
 
class PlayerSlider : public QSlider
{
    Q_OBJECT
public:
    PlayerSlider(QWidget * parent = 0);
    void        setProgress(qint64);
signals:
    void        sigProgress(qint64);
private:
    bool        m_bPressed;
protected:
    void        mousePressEvent(QMouseEvent *);
    void        mouseMoveEvent(QMouseEvent *);
    void        mouseReleaseEvent(QMouseEvent *);
};
 
#endif // PLAYERSLIDER_H
#include "playerslider.h"
 
PlayerSlider::PlayerSlider(QWidget * parent) : QSlider(parent)
{
    m_bPressed = false;
}
 
void PlayerSlider::mousePressEvent(QMouseEvent *e)
{
    m_bPressed = true;
    QSlider::mousePressEvent(e);//必须有这句,否则手动不能移动滑块
}
 
void PlayerSlider::mouseMoveEvent(QMouseEvent *e)
{
    QSlider::mouseMoveEvent(e);//必须有这句,否则手动不能移动滑块
}
 
void PlayerSlider::mouseReleaseEvent(QMouseEvent *e)
{
    m_bPressed = false;
    qint64 i64Pos = value();
    emit sigProgress(i64Pos);
 
    QSlider::mouseReleaseEvent(e);//必须有这句,否则手动不能移动滑块
}
 
void PlayerSlider::setProgress(qint64 i64Progress)
{
    if(!m_bPressed)
        setValue(i64Progress);
}

这个类的作用有3个:

1)接收QMediaPlaer发来的进度信息,更新进度条;

2)当用户操作进度条时,不再让进度条响应QMediaPlaer发来的进度信息;

3)当用户完成对进度条的拖动后,向QMediaPlaer发送播放位置更新信息。

另一个类是VideoPlayer,行为定义如下:

#ifndef VIDEOPLAYER_H
#define VIDEOPLAYER_H
 
#include <QWidget>
#include <QtMultimedia>
#include <QVideoWidget>
 
namespace Ui {
class VideoPlayer;
}
 
class VideoPlayer : public QWidget
{
    Q_OBJECT
 
public:
    explicit VideoPlayer(QWidget *parent = 0);
    ~VideoPlayer();
 
    bool            m_bReLoad;
public slots:
    void            OnSetMediaFile(void);
    void            OnSlider(qint64);
    void            OnDurationChanged(qint64);
    void            OnStateChanged(QMediaPlayer::State);
private:
    QVideoWidget    *       m_pPlayerWidget;
    QMediaPlayer    *       m_pPlayer;
    Ui::VideoPlayer *ui;
};
 
#endif // VIDEOPLAYER_H
#include "videoplayer.h"
#include "ui_videoplayer.h"
#include <QFileDialog>
 
VideoPlayer::VideoPlayer(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::VideoPlayer)
{
    ui->setupUi(this);
 
    m_pPlayer = new QMediaPlayer;
    m_pPlayerWidget = new QVideoWidget;
    m_pPlayer->setVideoOutput(m_pPlayerWidget);
    ui->verticalLayout->addWidget(m_pPlayerWidget);
 
    m_pPlayerWidget->setAutoFillBackground(true);
    QPalette qplte;
    qplte.setColor(QPalette::Window, QColor(0,0,0));
    m_pPlayerWidget->setPalette(qplte);
    //载入
    connect(ui->BtnLoad, SIGNAL(clicked()), this, SLOT(OnSetMediaFile()));
    //播放
    connect(ui->BtnPlay, SIGNAL(clicked()), m_pPlayer, SLOT(play()));
    //停止
    connect(ui->BtnStop, SIGNAL(clicked()), m_pPlayer, SLOT(stop()));
 
    connect(m_pPlayer, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(OnStateChanged(QMediaPlayer::State)));
 
    ui->BtnStop->setEnabled(false);
    //设置滑块行为
    m_bReLoad = true;
    ui->slider->setEnabled(false);
    connect(m_pPlayer, SIGNAL(positionChanged(qint64)), this, SLOT(OnSlider(qint64)));
    connect(m_pPlayer, SIGNAL(durationChanged(qint64)), this, SLOT(OnDurationChanged(qint64)));
    connect(ui->slider, SIGNAL(sigProgress(qint64)), m_pPlayer, SLOT(setPosition(qint64)));
}
 
VideoPlayer::~VideoPlayer()
{
    delete m_pPlayer;
    delete m_pPlayerWidget;
    delete ui;
}
 
void VideoPlayer::OnSetMediaFile(void)
{
    QFileDialog dialog(this);
    dialog.setFileMode(QFileDialog::AnyFile);
    QStringList fileNames;
    if (dialog.exec())
        fileNames = dialog.selectedFiles();
 
    if(!fileNames.empty())
    {
        m_pPlayer->setMedia(QUrl::fromLocalFile(fileNames[0]));
        m_bReLoad = true;
        ui->slider->setValue(0);
    }
}
 
void VideoPlayer::OnSlider(qint64 i64Pos)
{
    ui->slider->setProgress(i64Pos);
}
 
void VideoPlayer::OnDurationChanged(qint64 i64Duration)
{
    if(i64Duration > 0 && m_bReLoad)
    {
        ui->slider->setRange(0, i64Duration);
        m_bReLoad = false;
    }
}
 
 
void VideoPlayer::OnStateChanged(QMediaPlayer::State enumState)
{
    if(QMediaPlayer::StoppedState == enumState)
    {
        ui->BtnPlay->setEnabled(true);
        ui->BtnStop->setEnabled(false);
        ui->slider->setEnabled(false);
    }
    else if(QMediaPlayer::PlayingState == enumState)
    {
        ui->BtnPlay->setEnabled(false);
        ui->BtnStop->setEnabled(true);
        ui->slider->setEnabled(true);
    }
}

之所以在他的构造函数里设置QPalette,是因为假如不这样,在程序启动时,m_pPlayer不是黑色,而是与背景同样的颜色,显得不好看。

显示效果:

以上就是基于Qt实现视频播放器的制作的详细内容,更多关于Qt视频播放器的资料请关注编程网其它相关文章!

--结束END--

本文标题: 基于Qt实现视频播放器的制作

本文链接: https://www.lsjlt.com/news/174449.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于Qt实现视频播放器的制作
    本篇博客介绍如何利用qMediaPlayer和qvideowidget实现视频文件(avi,mp4….)的播放,并且提供进度显示,还可以通过拖动进度条来变换播放位置。 ...
    99+
    2022-12-08
    Qt实现视频播放器 Qt 视频播放器 Qt 视频播放
  • 基于Qt实现视频播放器功能
    目录一、功能介绍二、代码三、运行一、功能介绍 能实现视频播放 二、代码 mainwindow.h #ifndef MAINWINDOW_H #define MAINWIND...
    99+
    2022-11-12
  • 基于Qt编写简易的视频播放器
    目录一、前言二、效果图三、体验地址四、相关代码五、功能特点5.1 基础功能5.2 特色功能5.3 视频控件5.4 内核ffmpeg一、前言 花了一年多的时间,终于把这个超级播放器做成...
    99+
    2022-12-08
    Qt视频播放器 Qt视频播放 Qt 播放器
  • 基于OpenCV实现视频循环播放
    目录介绍1.Python+OpenCV实现2.C+++OpenCV实现补充介绍 本文将介绍基于OpenCV实现视频的循环播放。 有以下三个步骤: 首先设置一个frame的设置参数fr...
    99+
    2022-11-13
  • 基于electron的音视频播放器
    目录前言选择做一个音视频播放器桌面应用程序原因技术的选型已经实现了的功能音视频播放实现右键菜单实现总结效果图前言 我是一个前端工程师,前一段时间想着搞一个属于自己的作品,所以就突发奇...
    99+
    2022-11-13
  • C++ Qt实现音视频播放功能
    由于最近着手的Qt项目需要视频播放 自己做的时候踩了很多坑 避免以后踩坑 故在此记录实现过程  Qt版本 5.9 基于C++11 Qt核心组件与附加组件安装时请打钩 否则可能出现项目...
    99+
    2022-11-12
  • Qt实现视频播放器(附完整源码)
    以下是一个基于Qt实现的视频播放器的完整源码:```cpp#include #include #include #include #...
    99+
    2023-09-14
    Qt
  • Qt音视频开发之音频播放QAudioOutput的实现
    目录一、前言二、效果图三、体验地址四、相关代码五、功能特点5.1 基础功能5.2 特色功能5.3 视频控件5.4 音频组件一、前言 以前一直以为只有Qt5以后才有QAudioOutp...
    99+
    2023-03-10
    Qt实现音频播放QAudioOutput Qt音频播放QAudioOutput Qt音频播放
  • C++ Qt如何实现音视频播放功能
    这篇文章将为大家详细讲解有关C++ Qt如何实现音视频播放功能,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。由于最近着手的Qt项目需要视频播放 自己做的时候踩了很多坑&n...
    99+
    2023-06-21
  • Qt+Quick如何实现播放音乐和视频
    这篇文章主要介绍了Qt+Quick如何实现播放音乐和视频的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Qt+Quick如何实现播放音乐和视频文章都会有所收获,下面我们一起来看看吧。MediaPlayer 是 Q...
    99+
    2023-07-05
  • Qt+Quick实现播放音乐和视频的开发
    目录1、播放音乐2、播放视频3、多媒体元信息MediaPlayer 是 QML 提供的核心多媒体类,可以播放音频、视频。要使用 MediaPlayer,需要引入 QtMultimed...
    99+
    2023-03-08
    Qt Quick实现播放音乐 Qt Quick播放视频 Qt Quick
  • 基于HTML5的在线视频播放方法
    本文小编为大家详细介绍“基于HTML5的在线视频播放方法”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于HTML5的在线视频播放方法”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2022-10-19
  • 基于Qt实现图片播放器的示例代码
    前言:使用qt制作了一个简单的图片播放器,可以播放gif、png等格式图片 先来看看播放器的功能(当然是很简陋的,没有很深入的设计): 1、点击图片列表中图片进行播放。 2、自动播放...
    99+
    2022-12-16
    Qt实现图片播放器 Qt图片播放器 Qt图片播放
  • AndroidUniversalVideoView实现视频播放器
    本文实例为大家分享了Android UniversalVideoView实现视频播放器的具体代码,供大家参考,具体内容如下 1.添加依赖 app下的 build.gradle d...
    99+
    2022-11-13
  • Qt音视频开发之音频播放QAudioOutput如何实现
    这篇文章主要介绍了Qt音视频开发之音频播放QAudioOutput如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Qt音视频开发之音频播放QAudioOutput如何实现文章都会有所收获,下面我们一起来看...
    99+
    2023-07-05
  • 基于Python实现本地音乐播放器的制作
    制作这个播放器的目的是为了将下载下来的mp3文件进行随机或是顺序的播放。选择需要播放的音乐的路径,选择播放方式,经过测试可以完美的播放本地音乐。 在开始之前介绍一个免费下载mp3音乐...
    99+
    2022-11-11
  • 基于Qt实现简易GIF播放器的示例代码
    目录一、项目介绍二、项目基本配置三、UI界面设计四、主程序实现4.1 mainwindow.h头文件4.2 mainwindow.cpp源文件五、效果演示一、项目介绍 利用Qt设计一...
    99+
    2022-11-13
  • 基于Python实现捕获,播放和保存摄像头视频
    目录读取视频从相机中读取视频从文件中播放视频保存视频前几天有个读者在粉丝群里面提了一个问题: Python 怎样提高视频清晰度和对比度? 我之前没有涉及到使用 Python 操作视频...
    99+
    2022-11-10
  • 基于Qt播放器的实现详解(支持Rgb,YUV格式)
    目录色度空间转换YUV转RGB的公式对本地RGB32视频图像的播放1、绘图显示函数 打开目录函数2、按开始播放的槽函数3、启动线程 进行播放4、格式转换函数5、实现进度条与暂停的各类...
    99+
    2022-12-14
    Qt实现播放器 Qt播放器
  • c#基于winform制作音乐播放器
    目录AxWindowsMediaPlayer的方法1 首先新建一个页面 如图所示: 图片左侧是列表 使用listview 右侧是背景图片。图片框框的地方是后面可以实现的,+和-按钮分...
    99+
    2022-11-11
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作