通过QT对mplayer的应用,实现视频播放器的功能,包括开始播放、暂停播放、继续播放、终止播放、播放上一个、播放下一个、添加指定目录下的视频、删除指定视频、清空列表。应用到multimedia、multimediawidgets库和QStringList、QFileDialog等类。

界面效果如下:

videoplayer.h

#ifndef VIDEOPLAYER_H
#define VIDEOPLAYER_H#include <QMainWindow>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QListWidgetItem>
#include <QVideoWidget>
#include "myvideowidget.h"QT_BEGIN_NAMESPACE
namespace Ui { class VideoPlayer; }
QT_END_NAMESPACEclass VideoPlayer : public QMainWindow
{Q_OBJECTpublic:VideoPlayer(QWidget *parent = nullptr);~VideoPlayer();//重写事件过滤器函数virtual bool eventFilter(QObject *watched,QEvent *event);void add_Layout(QWidget *w);private slots:void on_listWidget_itemDoubleClicked(QListWidgetItem *item);void on_pushButton_start_clicked();void on_pushButton_stop_cont_clicked();void on_pushButton_stop_clicked();void on_pushButton_fullscreen_clicked();void on_pushButton_prev_clicked();void on_pushButton_next_clicked();void on_pushButton_add_video_clicked();void on_pushButton_del_video_clicked();void on_pushButton_clear_video_clicked();void on_horizontalSlider_sliderMoved(int position);void on_verticalSlider_sliderMoved(int position);//周期改变函数void set_sider(qint64 duration);//进度改变void set_value(qint64 position);private:Ui::VideoPlayer *ui;QMediaPlayer *player;//QVideoWidget *videow;MyVideoWidget *videow;QMediaPlaylist *playlist;QString video_duration;
};
#endif // VIDEOPLAYER_H

videoplayer.cpp

#include "videoplayer.h"
#include "ui_videoplayer.h"
#include <QFileDialog>
#include <QTime>
#include <QDebug>
#include <QKeyEvent>VideoPlayer::VideoPlayer(QWidget *parent): QMainWindow(parent), ui(new Ui::VideoPlayer)
{ui->setupUi(this);player = new QMediaPlayer(this);videow = new MyVideoWidget(this);playlist = new QMediaPlaylist(this);//为videow安装过滤器 ----- 主窗口//videow->installEventFilter(this);//将QVideoWidget加入布局管理器ui->horizontalLayout->addWidget(videow);//设置QMediaPlayer的videooutputplayer->setVideoOutput(videow);//设置播放模式playlist->setPlaybackMode(QMediaPlaylist::Loop);//设置播放器的播放列表player->setPlaylist(playlist);//连接信号和槽QObject::connect(player,SIGNAL(durationChanged(qint64)),this,SLOT(set_sider(qint64)));QObject::connect(player,SIGNAL(positionChanged(qint64)),this,SLOT(set_value(qint64)));//禁止暂停按钮ui->pushButton_stop_cont->setEnabled(false);
}VideoPlayer::~VideoPlayer()
{delete ui;
}bool VideoPlayer::eventFilter(QObject *watched,QEvent *event)
{//按键事件if(event->type()==QEvent::KeyPress){QKeyEvent *keyevent = dynamic_cast<QKeyEvent *>(event);//按了Esc,退出全屏if(keyevent->key()==Qt::Key_Escape){//恢复播放窗口为子窗口videow->setWindowFlag(Qt::SubWindow);//退出全屏videow->showNormal();//重设父窗口videow->setParent(this);//重新加入布局管理器ui->horizontalLayout->addWidget(videow);}}//调用基类的过滤器处理函数return QMainWindow::eventFilter(watched,event);
}void VideoPlayer::add_Layout(QWidget *w)
{ui->horizontalLayout->addWidget(w);
}void VideoPlayer::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{int row = ui->listWidget->currentRow();playlist->setCurrentIndex(row);//设置音量player->setVolume(ui->verticalSlider->value());player->play();ui->pushButton_stop_cont->setEnabled(true);
}//开始播放
void VideoPlayer::on_pushButton_start_clicked()
{//当选中新的视频文件或者不是暂停状态===>重新播放if(ui->listWidget->currentRow()!=playlist->currentIndex()||player->state()!=QMediaPlayer::PausedState){//指定当前播放文件int row = ui->listWidget->currentRow();playlist->setCurrentIndex(row);//设置音量player->setVolume(ui->verticalSlider->value());}player->play();ui->pushButton_stop_cont->setEnabled(true);
}//停止
void VideoPlayer::on_pushButton_stop_cont_clicked()
{player->pause();ui->pushButton_stop_cont->setEnabled(false);
}//暂停
void VideoPlayer::on_pushButton_stop_clicked()
{player->stop();ui->pushButton_stop_cont->setEnabled(false);
}//全屏
void VideoPlayer::on_pushButton_fullscreen_clicked()
{//把子窗口提升为顶层窗口videow->setWindowFlag(Qt::Window);//全屏videow->showFullScreen();
}void VideoPlayer::on_pushButton_prev_clicked()
{int row = ui->listWidget->currentRow();if(row==0)row = ui->listWidget->count();row--;ui->listWidget->setCurrentRow(row);on_listWidget_itemDoubleClicked(ui->listWidget->currentItem());
}void VideoPlayer::on_pushButton_next_clicked()
{int row = ui->listWidget->currentRow();if(row==ui->listWidget->count()-1)row = 0;elserow++;ui->listWidget->setCurrentRow(row);on_listWidget_itemDoubleClicked(ui->listWidget->currentItem());
}void VideoPlayer::on_pushButton_add_video_clicked()
{QStringList video_files = QFileDialog::getOpenFileNames(this,"选择视频文件","./video","*.mp3 *.mp4 *.avi");//去重for(int i=0;i<ui->listWidget->count();i++){for(int j=0;j<video_files.count();j++){if(ui->listWidget->item(i)->text()==video_files.at(j)){video_files.removeAt(j);break;}}}//如果无添加文件,直接返回if(video_files.isEmpty())return;//添加到listWidget和playlistfor(int i=0;i<video_files.count();i++){QString file = video_files.at(i);//把文件加入播放列表playlist->addMedia(QUrl::fromLocalFile(file));}ui->listWidget->addItems(video_files);//定位ui->listWidget->setCurrentRow(0);
}void VideoPlayer::on_pushButton_del_video_clicked()
{int row = ui->listWidget->currentRow();//取出一项QListWidgetItem *item = ui->listWidget->takeItem(row);if(item){delete item;}//如果删除了正在播放的视频,禁止暂停if(row==playlist->currentIndex())ui->pushButton_stop_cont->setEnabled(false);//从播放列表删除playlist->removeMedia(row);
}void VideoPlayer::on_pushButton_clear_video_clicked()
{ui->listWidget->clear();//清空播放列表playlist->clear();ui->pushButton_stop_cont->setEnabled(false);
}void VideoPlayer::on_horizontalSlider_sliderMoved(int position)
{player->setPosition(position);
}void VideoPlayer::on_verticalSlider_sliderMoved(int position)
{player->setVolume(position);//更新显示ui->label_volume->setText(QString("音量:%1").arg(position));
}//周期改变函数
void VideoPlayer::set_sider(qint64 duration)
{qDebug()<<duration;if(duration!=0){//设置进度条最大值ui->horizontalSlider->setRange(0,duration);QTime t = QTime(duration/1000/60/60,duration/1000/60%60,duration/1000%60);//显示周期video_duration = t.toString("hh:mm:ss");ui->label_duration_position->setText(QString("00:00:00/%1").arg(video_duration));//显示歌曲切换ui->listWidget->setCurrentRow(playlist->currentIndex());}
}//进度改变
void VideoPlayer::set_value(qint64 position)
{//更新进度条的值ui->horizontalSlider->setValue(position);QTime t = QTime(position/1000/60/60,position/1000/60%60,position/1000%60);//显示进度ui->label_duration_position->setText(QString("%1/%2").arg(t.toString("hh:mm:ss")).arg(video_duration));
}

myvideowidget.h

#ifndef MYVIDEOWIDGET_H
#define MYVIDEOWIDGET_H#include <QVideoWidget>class MyVideoWidget : public QVideoWidget
{Q_OBJECT
public:MyVideoWidget(QWidget *parent=0);//重写按键事件处理函数virtual void keyPressEvent(QKeyEvent *event);private:QWidget *p;
};#endif // MYVIDEOWIDGET_H

myvideowidget.cpp

#include "myvideowidget.h"
#include <QKeyEvent>
#include "videoplayer.h"MyVideoWidget::MyVideoWidget(QWidget *parent):QVideoWidget(parent)
{//记录父对象p = parent;
}void MyVideoWidget::keyPressEvent(QKeyEvent *event)
{if(event->key()==Qt::Key_Escape){//恢复播放窗口为子窗口this->setWindowFlag(Qt::SubWindow);//退出全屏this->showNormal();//重设父窗口this->setParent(p);//重新加入布局管理器VideoPlayer *vp = dynamic_cast<VideoPlayer *>(p);vp->add_Layout(this);}return QVideoWidget::keyPressEvent(event);
}

main.cpp

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

完整工程代码:https://download.csdn.net/download/weixin_43793181/20334966

在linux下QT设计实现视频播放器相关推荐

  1. linux下qt实现vlc视频播放器,Qt封装本地视频播放器(VLC二次开发)

    Qt本地视频播放器 1.使用vlc官方sdk封装,并在QLabel上面播放 2.首先到vlc官网下载vlc的sdk环境,下载地址:http://download.videolan.org/pub/vi ...

  2. linux下最好用的视频播放器,mplayer,smplayer怎么安装 播放黑屏

    推荐一款linux环境下好用的视频播放器 mplayer没有图形化界面 smplayer是mplayer的有图形化界面的软件 用yum命令安装 yum install smplayer 该命令会让mp ...

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

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

  4. Linux上的一些开源视频播放器

    介绍Linux下的一些开源视频播放器. VLC Media Player 内置编解码器.定制选项.跨平台.支持每种视频文件格式.扩展可用于增加功能.能够处理各种文件格式和编解码器.字幕同步.音频/视频 ...

  5. alin的学习之路:嵌入式课程设计总结(基于Linux的Qt版MP3播放器)

    嵌入式课程设计总结(基于Linux的Qt版MP3播放器) 废话不多写直接上图上代码,其中有很多不规范的地方,希望大佬们指正. 1.课设题目 设计一个MP3播放器,要求:使用Linux下的madplay ...

  6. linux 命令行视频播放器,linux下的命令行播放器moc

    linux下的命令行播放器moc 安裝:直接APT-GET sudo apt-get install moc 安裝完成后在終端用命令mocp(注意不是命令moc啊)打開moc播放器. 他默認是沒有配置 ...

  7. Android课程设计之视频播放器

    CSDN下载:https://download.csdn.net/download/eseszb/10463442 移动互联网开发   课程设计报告 学生姓名:学 号: 专业:计算机科学与技术 班级: ...

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

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

  9. linux上 arm开发环境搭建,详解 LINUX下QT For ARM开发环境搭建过程

    LINUX下QT For ARM开发环境搭建过程是本文介绍的内容,不多说,先来看内容.在PC上,我们需要得到两个版本的Qt,分别是:Qt-4.5.2和QtEmbedded-4.5.2-arm.前者包括 ...

最新文章

  1. R语言ggplot2可视化设置不同的图像主题(theme):使用各种不同的主题(theme)可视化数据、单的黑白主题theme_bw主题(theme)、默认的主题(theme)可视化数据
  2. K8S 1.9.0二进制包部署(五)
  3. 微信小程序开发踩坑日记
  4. samba mv命令出错
  5. GenericUDTF使用流程记载(转载+自己整理)
  6. C语言的标识符由什么组成
  7. 汇编语言-018(FLD 、FST、FSTP、FCHS、FABS 、浮点运算符、浮点比较 )
  8. 数据科学 IPython 笔记本 9.5 NumPy 数组上的计算:通用函数
  9. 【kafka】kafka_2.11-1.1.0 配置 SASL_PLAINTEXT 认证方式
  10. mysql 无法创建用户_mysql不能创建用户
  11. C语言和设计模式(访问者模式)
  12. Spring Cloud学习笔记---一分钟知晓Zuul
  13. python 卡方检验 特征选择_特征选择:卡方检验
  14. MDK5 代码折叠功能
  15. edge浏览器internet选项的设置方法
  16. 【小程序开发原创】小程序裁剪图片上传头像,二维码源码
  17. scala什么是单例对象_Scala单例和伴侣对象
  18. 交换机putty怎么调试_【技术】如何登陆交换机进行命令配置?常用的交换机组网模拟器有哪些?...
  19. html 在线打开pdf文件怎么打开,在HTML中打开pdf文件怎么打开
  20. mysql vb.net odbc_在VB.net中连接MySql的类库_MySQL

热门文章

  1. JavaScript基础知识点
  2. Linux内核4.14版本——drm框架分析(1)——drm简介
  3. 电磁场第一章——矢量分析工具 复习笔记
  4. 分分钟解决 MySQL 查询速度慢与性能差(中)
  5. 睡好觉很重要宫延楼睡博士缓解睡眠焦虑
  6. Burp Suite Professional 2023.1 (macOS, Linux, Windows) - Web 应用安全、测试和扫描
  7. C# 平方、开方、保留小数 运算
  8. 计算机网络原理自考真题2013,最全全国自考计算机网络原理真题及答案2008--2013.doc...
  9. GameFramework专栏目录
  10. 2022年全球市场PCB X射线检测系统总体规模、主要生产商、主要地区、产品和应用细分研究报告