参考博主 1https://blog.csdn.net/liji_digital/article/details/83691035
参考博主2https://blog.csdn.net/qq_41071706/article/details/89855986

实现功能

  1. 通过选择按钮选择本地视频文件
  2. 点击播放按钮播放文本框中的文件(不支持其他类型文件的异常检测) 支持mp4 avi等等 如果不支持见参考博主2的内容
  3. 点击暂停按钮,暂停本视频播放,再次点击播放按钮,继续本视频的播放
  4. 进度条跟随视频进度移动
  5. 拖动进度条改变视频播放位置
  6. 视频必须播放之后才能拖动进度条改变播放进度
  7. 不支持快进慢放等操作

1.首先创建一个带ui的project

步骤省略

2.在ui文件中绘制如下模块

实现代码如下

// mainwindow.h


#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QWidget>
#include <QtMultimediaWidgets/QVideoWidget>
#include <QtMultimedia/QtMultimedia>namespace Ui {class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();private:Ui::MainWindow *ui;QVideoWidget    *       m_pPlayerWidget;QMediaPlayer    *       m_pPlayer;public slots:void onSetMediaFile();void onStartPlayMedia();void onChangedPlayerPosition(qint64 pos);
};#endif // MAINWINDOW_H

// mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtMultimediaWidgets/QVideoWidget>
#include <QtMultimedia/QtMultimedia>
#include <QFileDialog>
#include <QMessageBox>
#include <QException>
#include <QDebug>
#include "player-slider.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);m_pPlayer = new QMediaPlayer;m_pPlayerWidget = new QVideoWidget;QPalette qplte;qplte.setColor(QPalette::Window, QColor(0,0,0));m_pPlayerWidget->setPalette(qplte);m_pPlayer->setVideoOutput(m_pPlayerWidget);ui->verticalLayout->addWidget(m_pPlayerWidget);m_pPlayerWidget->setAutoFillBackground(true);QObject::connect(ui->pushButton_3,&QPushButton::clicked,this,&MainWindow::onSetMediaFile);QObject::connect(ui->pushButton,&QPushButton::clicked,this,&MainWindow::onStartPlayMedia);QObject::connect(ui->pushButton_2,&QPushButton::clicked,this->m_pPlayer,&QMediaPlayer::pause);QObject::connect(m_pPlayer, &QMediaPlayer::positionChanged, ui->horizontalSlider,&QPlayerSlider::setValue);QObject::connect(m_pPlayer, &QMediaPlayer::durationChanged, ui->horizontalSlider,&QPlayerSlider::setDurationPosition);QObject::connect(ui->horizontalSlider,&QPlayerSlider::sigProgress,this,&MainWindow::onChangedPlayerPosition);}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::onSetMediaFile()
{QFileDialog dialog(this);dialog.setFileMode(QFileDialog::AnyFile);QStringList fileNames;if(dialog.exec()){fileNames = dialog.selectedFiles();}if(!fileNames.empty()){ui->lineEdit->setText(fileNames[0]);}
}void MainWindow::onStartPlayMedia()
{qDebug()<<ui->lineEdit->text()<<"\n"<<m_pPlayer->currentMedia().canonicalUrl().path();QString filePath = ui->lineEdit->text();if(filePath != nullptr && filePath != ""){if(m_pPlayer->state() == QMediaPlayer::PausedState &&ui->lineEdit->text() == m_pPlayer->currentMedia().canonicalUrl().path().right(m_pPlayer->currentMedia().canonicalUrl().path().length()-1)){m_pPlayer->play();}else {m_pPlayer->setMedia(QUrl::fromLocalFile(filePath));m_pPlayer->play();}}else{QMessageBox::critical(this,"警告","请选择要播放的视频文件!");}
}void MainWindow::onChangedPlayerPosition(qint64 pos)
{QObject::disconnect(m_pPlayer, &QMediaPlayer::positionChanged, ui->horizontalSlider,&QPlayerSlider::setValue);m_pPlayer->setPosition(pos);QObject::connect(m_pPlayer, &QMediaPlayer::positionChanged, ui->horizontalSlider,&QPlayerSlider::setValue);}

// playerslider.h 需要将ui的slider提升为QPlayerSlider类

#ifndef PLAYERSLIDER_H
#define PLAYERSLIDER_H
#include <QSlider>class QPlayerSlider :public QSlider{Q_OBJECT
public:QPlayerSlider(QWidget* parent = 0);
public slots:void setDurationPosition(qint64 max_len);
signals:void sigProgress(qint64 pos);
protected:void mouseReleaseEvent(QMouseEvent *e);void mousePressEvent(QMouseEvent *e);void mouseMoveEvent(QMouseEvent *e);
};#endif // PLAYERSLIDER_H

// playerslider.cpp

#include "player-slider.h"
#include <QDebug>QPlayerSlider::QPlayerSlider(QWidget * parent) : QSlider(parent)
{}void QPlayerSlider::setDurationPosition(qint64 max_len)
{setRange(0,max_len);
}void QPlayerSlider::mouseReleaseEvent(QMouseEvent *e)
{qint64 pos = this->value();emit sigProgress(pos);QSlider::mouseReleaseEvent(e);
}void QPlayerSlider::mousePressEvent(QMouseEvent *e)
{QSlider::mousePressEvent(e);
}void QPlayerSlider::mouseMoveEvent(QMouseEvent *e)
{QSlider::mouseMoveEvent(e);
}

实现效果

全部代码见 https://download.csdn.net/download/hyperspace88466/72190342
仅供练习,如有问题请留言~

QT5.9实现一个视频播放器播放 暂停进度条相关推荐

  1. 安卓自定义视频播放器,有进度条暂停播放等功能

    安卓视频播放页代码 package com.example.test1;import android.content.Context; import android.content.Intent; i ...

  2. Linux 基于QT的mplayer视频播放器(实现进度条的拖动、播放列表等)

    UI随手做的,有点简陋 先放效果图: 功能:实现了音量的进度条,播放进度条,播放暂停,停止,快进快退等等,并且界面可以跟随窗口缩放.(进度条可拖动控制视频.音频) 下面界面视频的功能: 1.播放 用m ...

  3. 用QT5做一个视频播放器

    作为一个菜鸟有空的时候都会做一些QT小项目拿来练练手,今天做的是一个视频播放器,暂时只实现了本地视频的播放,后续会继续完善实现网络播放功能. (1)因为图片都是自己网上随便找的,做的界面有点丑,后续有 ...

  4. 嵌入式Qt 开发一个视频播放器

    上篇文章:嵌入式 Qt开发一个音乐播放器,使用Qt制作了一个音乐播放器,并在OK3568开发板上进行了运行测试,实际测试效果还不错. 本篇继续来实现一个Qt视频播放器软件,可以实现视频列表的显示与选择 ...

  5. html选择本地文件视频并播放器,使HTML5视频播放器播放不同的文件(Make a HTML5 video player play a different file)...

    使HTML5视频播放器播放不同的文件(Make a HTML5 video player play a different file) 在播放视频时,我无法让HTML5播放器播放不同的视频,我尝试更改 ...

  6. 用Pyqt5写一个视频播放器

    用Pyqt5写一个视频播放器 编写方式: Qt Designer设计,pyuic5转化为.py文件. 播放器效果: 代码链接:https://github.com/GRF-Sunomikp31/Qt_ ...

  7. FFmpeg开发(四)——Qt实现一个视频播放器(参考了暴风影音、迅雷影音)

    FFmpeg开发(四)--Qt实现一个视频播放器(参考了暴风影音.迅雷影音) 本系列文章目录: FFmpeg开发(一)一Qt Creator配置FFmpeg FFmpeg开发(二)--(FFmpeg基 ...

  8. 如何使用JiaoZiVideoPlayer(饺子视频播放器)播放avi格式的视频

    如何使用JiaoZiVideoPlayer(饺子视频播放器)播放avi等原生不支持的格式的视频 1.为什么使用JiaoZiVideoPlayer播放AVI格式的视频 有的同学可能会发现,部分.avi文 ...

  9. android第三方开源音频播放器,Android第三方开源SeekBarCompat:音乐类播放器等APP进度条常用...

     Android第三方开源SeekBarCompat:音乐类播放器等APP进度条常用 Android平台原生的SeekBar设计简单,然而,比如现在流行的一些音乐播放器的播放进度控制条,如果直接使 ...

最新文章

  1. IOS开发怎么UINavigationController设置title标题的颜色?
  2. jsp定义一个变量在html,jsp中变量及方法的声明与使用说明
  3. POJ 1833 排列【STL/next_permutation】
  4. easyui combobox java_Easyui的combobox实现动态数据级联效果
  5. matplotlib布局_Matplotlib多列,行跨度布局
  6. C语言/C++编程学习:不找C/C++的工作也要学C/C++的原因
  7. AutoCAD_acadiso.dwt卡死
  8. 3dvary灯光材质为什么不亮_关机后电脑灯光闪瞎狗眼?在这里关闭它
  9. SysV和BSD启动风格的比较
  10. 中缀表达式转换为后缀表达式算法
  11. FastStone Capture:Windows系统下小巧好用的宝藏电脑截图软件
  12. 2021 年产品沉思录精选集 PDF 下载及卷首语合集:像农夫一样耕耘和等待
  13. bzoj4199品酒大会
  14. 001-电脑操作规范-2019年03月.doc
  15. html5 css背景图片满,css background-size与背景图片填满div
  16. FFmpeg —— librtmp的安装(linux)
  17. htc legend 升级到 android 2.2 froyo 后,输入法问题
  18. 关于Mysql使用时出现部分错误的总结
  19. 小米官宣停服后,“米聊“再次上线
  20. UEBA技术在ADAudit Plus中的应用

热门文章

  1. 怎么查看图片像素和大小?照片exif信息怎么看?
  2. Java中API的两个文件CHM和CHW
  3. 计算机考研学校难度排行榜,计算机考研难度排行榜新鲜出炉 - 深圳远途教育
  4. 电脑测试瓶颈的软件,只需一招教你找出电脑的性能瓶颈-怎么测试电脑性能
  5. 碳水循环饮食计算简介
  6. 射频测试系统软件,通用射频自动测试系统解决方案
  7. [爆笑网文]我终于成材了!一个大学毕业生的学业汇报
  8. 【Windows Server 2019】活动目录 (Active Directory) ——将计算机加入域和脱离域
  9. CIH噩梦重现 二手主板市场暗藏“谍影”BIOS病毒
  10. 《潜龙谍影4》详细剧情解析