QT5.9实现一个视频播放器播放 暂停进度条
参考博主 1https://blog.csdn.net/liji_digital/article/details/83691035
参考博主2https://blog.csdn.net/qq_41071706/article/details/89855986
实现功能
- 通过选择按钮选择本地视频文件
- 点击播放按钮播放文本框中的文件(不支持其他类型文件的异常检测) 支持mp4 avi等等 如果不支持见参考博主2的内容
- 点击暂停按钮,暂停本视频播放,再次点击播放按钮,继续本视频的播放
- 进度条跟随视频进度移动
- 拖动进度条改变视频播放位置
- 视频必须播放之后才能拖动进度条改变播放进度
- 不支持快进慢放等操作
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实现一个视频播放器播放 暂停进度条相关推荐
- 安卓自定义视频播放器,有进度条暂停播放等功能
安卓视频播放页代码 package com.example.test1;import android.content.Context; import android.content.Intent; i ...
- Linux 基于QT的mplayer视频播放器(实现进度条的拖动、播放列表等)
UI随手做的,有点简陋 先放效果图: 功能:实现了音量的进度条,播放进度条,播放暂停,停止,快进快退等等,并且界面可以跟随窗口缩放.(进度条可拖动控制视频.音频) 下面界面视频的功能: 1.播放 用m ...
- 用QT5做一个视频播放器
作为一个菜鸟有空的时候都会做一些QT小项目拿来练练手,今天做的是一个视频播放器,暂时只实现了本地视频的播放,后续会继续完善实现网络播放功能. (1)因为图片都是自己网上随便找的,做的界面有点丑,后续有 ...
- 嵌入式Qt 开发一个视频播放器
上篇文章:嵌入式 Qt开发一个音乐播放器,使用Qt制作了一个音乐播放器,并在OK3568开发板上进行了运行测试,实际测试效果还不错. 本篇继续来实现一个Qt视频播放器软件,可以实现视频列表的显示与选择 ...
- html选择本地文件视频并播放器,使HTML5视频播放器播放不同的文件(Make a HTML5 video player play a different file)...
使HTML5视频播放器播放不同的文件(Make a HTML5 video player play a different file) 在播放视频时,我无法让HTML5播放器播放不同的视频,我尝试更改 ...
- 用Pyqt5写一个视频播放器
用Pyqt5写一个视频播放器 编写方式: Qt Designer设计,pyuic5转化为.py文件. 播放器效果: 代码链接:https://github.com/GRF-Sunomikp31/Qt_ ...
- FFmpeg开发(四)——Qt实现一个视频播放器(参考了暴风影音、迅雷影音)
FFmpeg开发(四)--Qt实现一个视频播放器(参考了暴风影音.迅雷影音) 本系列文章目录: FFmpeg开发(一)一Qt Creator配置FFmpeg FFmpeg开发(二)--(FFmpeg基 ...
- 如何使用JiaoZiVideoPlayer(饺子视频播放器)播放avi格式的视频
如何使用JiaoZiVideoPlayer(饺子视频播放器)播放avi等原生不支持的格式的视频 1.为什么使用JiaoZiVideoPlayer播放AVI格式的视频 有的同学可能会发现,部分.avi文 ...
- android第三方开源音频播放器,Android第三方开源SeekBarCompat:音乐类播放器等APP进度条常用...
Android第三方开源SeekBarCompat:音乐类播放器等APP进度条常用 Android平台原生的SeekBar设计简单,然而,比如现在流行的一些音乐播放器的播放进度控制条,如果直接使 ...
最新文章
- IOS开发怎么UINavigationController设置title标题的颜色?
- jsp定义一个变量在html,jsp中变量及方法的声明与使用说明
- POJ 1833 排列【STL/next_permutation】
- easyui combobox java_Easyui的combobox实现动态数据级联效果
- matplotlib布局_Matplotlib多列,行跨度布局
- C语言/C++编程学习:不找C/C++的工作也要学C/C++的原因
- AutoCAD_acadiso.dwt卡死
- 3dvary灯光材质为什么不亮_关机后电脑灯光闪瞎狗眼?在这里关闭它
- SysV和BSD启动风格的比较
- 中缀表达式转换为后缀表达式算法
- FastStone Capture:Windows系统下小巧好用的宝藏电脑截图软件
- 2021 年产品沉思录精选集 PDF 下载及卷首语合集:像农夫一样耕耘和等待
- bzoj4199品酒大会
- 001-电脑操作规范-2019年03月.doc
- html5 css背景图片满,css background-size与背景图片填满div
- FFmpeg —— librtmp的安装(linux)
- htc legend 升级到 android 2.2 froyo 后,输入法问题
- 关于Mysql使用时出现部分错误的总结
- 小米官宣停服后,“米聊“再次上线
- UEBA技术在ADAudit Plus中的应用
热门文章
- 怎么查看图片像素和大小?照片exif信息怎么看?
- Java中API的两个文件CHM和CHW
- 计算机考研学校难度排行榜,计算机考研难度排行榜新鲜出炉 - 深圳远途教育
- 电脑测试瓶颈的软件,只需一招教你找出电脑的性能瓶颈-怎么测试电脑性能
- 碳水循环饮食计算简介
- 射频测试系统软件,通用射频自动测试系统解决方案
- [爆笑网文]我终于成材了!一个大学毕业生的学业汇报
- 【Windows Server 2019】活动目录 (Active Directory) ——将计算机加入域和脱离域
- CIH噩梦重现 二手主板市场暗藏“谍影”BIOS病毒
- 《潜龙谍影4》详细剧情解析