【QT/C++】基于QT开发的一款关于A-SOUL的视频播放器(附源码)
前言
笔者大二,关于课程的大作业是基于QT写出一款软件,但是老师又不肯让我们设计游戏(淦!)在咨询老师以后,他说让我设计一款视频播放器,那彳亍吧,于是就自己看视频和敲代码了(因为老师讲课的水平太差了)
说实话一开始拿到这个大作业任务还是有点麻的,因为QT和C++一点没学过,都是要从零开始的学习生活(),当时还是五一被A-SOUL引了过去,鼠鼠就想着不然做一个关于A-SOUL的视频播放器吧(不过说是这样,但其实也只是把她们的因素融在程序而已)。
然后就从B站1.5倍速看完了黑马的C++和QT课程,C++的课程就敲了视频中的第一个大作业,QT的就没时间敲了,后来就去看了黑马的那个关于QT的优秀毕设——视频播放器,好家伙,本来以为直接摸鱼了,照着敲就完事,然后看完发现,大哥,你这也没说完啊,就无了??就基本功能说完了而已啊喂,然后就转战了另一个视频,但是却是用linux开发的,本来以为windows和linux没啥区别,敲了几个P的视频,一运行一看,好家伙,上当了,该报错还是报错。得,只能参考CSDN上以前大佬的文章,结合自己刚学的知识,一个一个缝合了。
在此感谢我参考的这些文章的作者,还有很多作者,因为看的太多,不记得名字了(抱歉!),就不一一列举了。
都或多或少帮助了视频播放器的开发。再次表示感谢!
特别感谢 点兔酱 大佬,我的列表函数就是厚颜无耻地copy他的……
因为是初次接触QT,肯定编码不是很好看,可能源码中甚至有一些多余的代码,不用怀疑,就是我忘记删了,但是删了又觉得有点太麻烦(懒狗一条罢了),所以下载源码的大伙看的时候可能会有点折磨,因为时间很紧,有一些代码是缝合的,只是达到了功能,本鼠并未能彻底理解(对,指的就是列表中的大部分函数)。在此表示抱歉了
注:
图标是选用B站一个大佬设计的,改了颜色,但是翻贾布的动态翻到4月了还是没找到(可能是删了?)
背景是选用枝江往事的背景,但是也不知道原作者是谁,在这里表示抱歉,要是有人能跟原作者说说就太谢谢了。不愿意被使用的话我会删除的
一、软件使用说明
1.运行软件的界面如下
总体界面:
左上角为打开文件按钮:
下方为视频进度条
左下角为时间轴,左为目前视频的播放时间,右为视频的总时间
下方中间为播放控件按钮,从左到右分别为:上一视频,暂停/播放,下一视频
旁边为音量控制按键和音量控制进度条
右下角为最大化/最小化按键
右上角为窗口控制按钮,从左到右分别是:最小化,最大化/正常化,关闭(并不是退出,只是退出到托盘)
右侧为播放列表显示
2.操作软件的步骤
首先对列表进行右键,点击“清空播放列表”
播放列表清空:
然后点击右上角的“打开按钮”:
点击后出现页面:
选择要添加的视频,点击打开后,列表出现相应的视频文件名称:
也可以通过右键列表,点击“添加文件”添加
添加过程同上,不再赘述。
在列表中,可以通过右键一个视频的条目,进行列表的选项扩充:
删除选中项:删除该条目
打开文件目录:打开该文件所在的目录
双击想播放的文件,即可播放
也可在列表中通过右键,点击“播放”进行播放
对页面进行鼠标双击,可进行全屏化
也可通过
右下角的
(全屏按钮)
或者右上角的
(窗口最大化按钮)
进行页面最大化
在播放/暂停过程中,可以点击列表左侧的按钮,进行列表隐藏
效果如下:
在播放过程中,可以通过点击进度条,或拖动进度条进行视频进度跳转,同理音量键也可以如此,此外,可以直接点击音量键进行静音,再次点击后恢复为最后一次调整的音量值
在播放时,可以通过键盘来控制视频事件
空格:控制视频播放/暂停
方向键↑ :控制音量+
方向键↓ :控制音量-
方向键 ←:控制视频进度后退
方向键→ :控制视频进度快进
ESC :在全屏状态下为恢复正常界面
在播放中,可以通过:
进行上一视频/下一视频的播放,也可经过视频自动播放完后进行到下一视频。当进行到列表最后一个时,自动循环到列表第一个播放
右上角按钮介绍
从左到右分别是:最小化,最大化/正常化,关闭(并不是退出,只是退出到托盘)
点击最小化,程序缩小到任务栏(视频仍然保持最小化之前的状态)
最大化
关闭:
右下角出现信息,视频暂停
托盘中的显示:
可以通过单击/右键出现菜单复原主页面
点击退出则为退出程序
二、软件设计说明
1.UI界面的设计
视频播放界面运用widget控件,提升为QVideowidget类,按键采用普通的Push Button,进度条和按钮运用提升样式表改变样貌,要特别说明的是,ListView控件在UI中提升样式表并不能改变样式,只能在代码中修改样式
2.主代码中的部分函数
在构造函数中:
通过监控各个按键,达到以按键控制程序的目的
ui->btn_volume->installEventFilter(this);
ui->fullscreenBtn->installEventFilter(this);
ui->btn_previous->installEventFilter(this);
ui->btn_next->installEventFilter(this);
ui->btn_maxnized->installEventFilter(this);
ui->btn_closed->installEventFilter(this);
ui->btn_minnized->installEventFilter(this);
ui->listView->installEventFilter(this);
installEventFilter(this);
设置ListView的背景以及样式
QPixmap pixmap = QPixmap(":/A-SOUL/listview_background.png").scaled(ui->listView->size(),Qt::IgnoreAspectRatio,Qt::SmoothTransformation);
QPalette palette(ui->listView->palette());
palette.setBrush(QPalette::Background, QBrush(pixmap));
ui->listView->setPalette(palette);
setStyleSheet("QListView{background-image: url(:/A-SOUL/listview_background.png);background-attachment: scroll;background-repeat: repeat-xy;}QListView{alternate-background-color: yellow;}QListView{show-decoration-selected: 1; }QListView::item:alternate {background: #EEEEEE;} QListView::item:selected {border: 1px solid #6a6ea9;}QListView::item:selected:!active {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #ABAFE5, stop: 1 #8588B2);}QListView::item:selected:active {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #6a6ea9, stop: 1 #888dd9);}QListView::item:hover {background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 #FAFBFE, stop: 1 #DCDEF1);}");
Widget播放事件的相关函数:
//设置播放属性
//1.监听信号变化函数
connect(mediaPlayer,SIGNAL(mediaStateChanged(QMediaPlayer::State)),this,SLOT(mediaStateChanged(QMediaPlayer::State)));
//2.播放进度信号变化函数
connect(mediaPlayer,SIGNAL(positionChanged(qint64)),this,SLOT(positionChanged(qint64)));
//3.播放长度信号变化
connect(mediaPlayer,SIGNAL(durationChanged(qint64)),this,SLOT(durationChanged(qint64)));
//4.设置播放错误关联
connect(mediaPlayer,SIGNAL(error(QMediaPlayer::Error)),