【QT/C++】基于QT开发的一款A-SOUL元素的视频播放器(附源码)

本文介绍了一位初学者基于QT框架和C++开发的A-SOUL元素视频播放器,包括软件设计、使用说明及源码分享。详细讲述了UI界面设计、主代码功能实现,如播放、暂停、进度条控制等功能,并提供了下载源码的链接。
摘要由CSDN通过智能技术生成

前言

  笔者大二,关于课程的大作业是基于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)),
  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值