基于Qt音乐播放器课程设计报告文档格式.docx
- 文档编号:19772860
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:15
- 大小:289.33KB
基于Qt音乐播放器课程设计报告文档格式.docx
《基于Qt音乐播放器课程设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《基于Qt音乐播放器课程设计报告文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
为了使用户体验及软件质量都达到一定的完备性,我们需要保证一定的基础功能。
基于人性化角度,开发设计基础功能,使用户可以流畅使用软件。
在进行功能划分的过程当中,可以采用模块化的功能设计思想,对功能的划分尽可能的细致,做到不遗漏。
例如,应当有播放模式的选择,音乐列表的选择,音量高低的调试等。
(2)稳定性
基于QT的音乐播放器是一款娱乐软件,更需要保证软件的稳定性,以使用户体验达到最高。
若播放器不稳定,则用户体验这一指标则会大幅下降。
(3)联通性
移动设备日益增长,微博、微信等交流平台在市场中也占据重要地位。
为迎合这一现象,QT音乐播放器必须进行一定的互联网联通性。
可以进行音乐分享、转发评论等。
这样可以实现软件之间的交流结合,有利于软件的推广。
同时也有利于通过大数据分析,得到听众最喜爱听的歌曲,符合大众口味。
2.2开发环境
操作系统:
Windows10
开发平台:
Qt
使用语言:
C++
2.3软件概要设计
在软件概要设计阶段,是基于整个系统需要实现的功能,对物业管理信息系统的整体架构进行科学合理的设计,使之有一定的规律可以遵循,不进行盲目的设计工作,这对于后期的程序编码和系统的来说意义重大。
在对音乐播放器软件进行软件需求分析之后,针对需求分析的结果,对系统进行了整体的架构设计。
设计实现的音乐播放器软件,从软件的架构来看,主要包括两个功能部分:
软件的歌曲播放部分和图标最小化功能实现部分。
其中,歌曲播放部分主要实现该软件的主要功能,即选择歌曲和播放歌曲;
另一部分则是最小化后软件的实现,主要包括显示、登录、设置、检查更新、退出。
以上是对该音乐播放器软件的整体工作架构进行的设计,该步骤是后续进一步进行系统功能实现的基础。
第三章软件功能实现
在设计实现基于Qt的音乐播放器软件的同时,充分考虑了Qt的语言特性和开发环境,发挥了其在用户界面应用程序开发当中的优势,对音乐播放器软件进行了开发。
根据前文对该音乐播放器软件的需求分析,以及对软件的设计分析结果,结合实际使用当中可能使用到的软件功能,并采用了软件工程中模块化的开发思想,完成了该音乐播放器软件的开发,下面分别对软件中重要的功能模块的实现方法及实现效果进行详细的介绍和分析。
3.1总体架构
通过在需求阶段对系统的总体功能的分析,我们得到了这个音乐播放器软件的总体功能结构,它应包括四大基本功能模块。
(1)选择歌曲文件模块:
用户可以方便的查询环境当中存在的歌曲列表信息,并找到满意歌曲的位置和具体的歌曲内容。
(2)歌曲播放模块:
用户根据所选择的具体歌曲让该软件对歌曲进行播放,并且可以实时查看歌曲的播放状态。
(3)播放状态控制模块:
用户可以查看成自己在歌曲播放过程中进度情况,并可以随时更改歌曲的播放进度信息。
(4)第二界面模块:
用户可以进入第二个更为简洁的界面进行播放、暂停、切换等操作。
3.2软件功能流程
整个软件所设计的工作流程如下:
(1)开始。
进入Qt界面开始运行软件。
(2)播放歌曲。
该部分是音乐播放器软件最主要的功能部分,播放歌曲的功能实现需要相对复杂的函数调用来实现,在软件开发的过程当中有具体的实现代码。
(3)播放设置。
该部分的实现是进一步提高用户的使用体验,方便用户根据其自身的需求对所播放的歌曲进行进度控制,可以暂停歌曲的播放,也可以继续歌曲的播放功能,同时也可以进行音量的调控,以及对歌曲播放的顺序进行调整,比如顺序播放、单曲循环等。
(4)第二界面。
点击shrink按钮可跳转至第二界面,进行播放切换歌曲等操作,也可以进行最小化。
(5)结束。
点击关闭软件,结束软件运行。
3.3具体功能实现
本人完成了本次音乐播放器中的歌曲导入模块以及播放歌曲的初步工作,具体的实现过程如下。
3.3.1歌曲导入
(1).h文件
歌曲导入部分的代码函数名称以及相应的函数声明完成在settingwiget.h的头文件下,先对命名空间进行前向声明,对类内的对象和方法进行声明,具体代码如下:
#ifndefSETTINGWIGET_H
#defineSETTINGWIGET_H
#include<
QWidget>
namespaceUi{
classsettingwiget;
}
classsettingwiget:
publicQWidget
{
Q_OBJECT
public:
explicitsettingwiget(QWidget*parent=0);
~settingwiget();
voidinitSystemSetting(void);
boolwriteInit(QStringpath,QStringuser_key,QStringuser_value);
boolreadInit(QStringpath,QStringuser_key,QString&
user_value);
privateslots:
voidon_pb_save_clicked();
voidon_pb_cancle_clicked();
voidon_tb_lyricsPath_clicked();
voidon_tb_songsPath_clicked();
voidon_pb_save_destroyed();
private:
Ui:
:
settingwiget*ui;
};
#endif//SETTINGWIGET_H
(2).cpp文件
配置文件写入和读取的方法完成在settingwiget.cpp文件内,代码如下:
settingwiget:
settingwiget(QWidget*parent):
QWidget(parent),
ui(newUi:
settingwiget)
ui->
setupUi(this);
SongsFile:
m_songPath.clear();
LyricsFile:
m_lyricPath.clear();
~settingwiget()
deleteui;
boolsettingwiget:
writeInit(QStringpath,QStringuser_key,QStringuser_value)
if(path.isEmpty()||user_key.isEmpty())
{
returnfalse;
}
else
//创建配置文件操作对象
QSettings*config=newQSettings(path,QSettings:
IniFormat);
//将信息写入配置文件
config->
beginGroup("
config"
);
setValue(user_key,user_value);
endGroup();
returntrue;
readInit(QStringpath,QStringuser_key,QString&
user_value)
user_value=QString("
"
//读取用户配置信息
user_value=config->
value(QString("
config/"
)+user_key).toString();
界面设计中按钮的具体功能也对应在settingwiget.cpp文件内,代码如下:
voidsettingwiget:
on_tb_songsPath_clicked()
m_songPath=QFileDialog:
getExistingDirectory();
le_songsPath->
setText(SongsFile:
m_songPath);
on_tb_lyricsPath_clicked()
m_lyricPath=QFileDialog:
le_lyricsPath->
setText(LyricsFile:
m_lyricPath);
on_pb_save_clicked()
writeInit(QString("
../user.ini"
),"
SONGPATH"
SongsFile:
LYRICPATH"
LyricsFile:
initSystemSetting();
this->
hide();
on_pb_cancle_clicked()
initSystemSetting(void)
readInit(QString("
on_pb_save_destroyed()
{}
其中,cpp文件内的头文件为:
#include"
settingwiget.h"
ui_settingwiget.h"
QFileDialog>
QSettings>
QDebug>
musicplayer.h"
musicwiget.h"
songsfile.h"
lyricsfile.h"
导入歌曲的页面设计完成在界面设计的settingwiget.ui文件下,如下图所示:
具体的对象为:
3.3.2歌曲播放的部分功能
musicplayer.h的头文件下,采用枚举类型对播放模式进行声明,写入信号和槽方便传值,对歌曲播放逻辑、歌曲列表获取逻辑、歌曲歌词获取逻辑的对象、方法进行声明,具体代码如下:
#ifndefMUSICPLAYER_H
#defineMUSICPLAYER_H
QObject>
QMediaPlayer>
QMediaPlaylist>
QList>
#defineTIME_MS_DURATION1000
#defineINIT_SYSTEM_VOLUME50
enumPlaybackMode//播放模式
CURRENT_ITEM_ONCE=0,//单曲播放
CURRENT_ITEM_IN_LOOP=1,//单曲循环
SEQUENTIAL=2,//顺序播放
LOOP=3,//列表循环
RANDOM=4//随机播放
classMusicPlayer:
publicQObject
signals:
voidsignalPositionChanged(QStringupdateTime);
voidsignalDurationChanged(qint64duration);
publicslots:
voidslotPositionChanged(qint64position);
voidslotDurationChanged(qint64duration);
explicitMusicPlayer(QObject*parent=0);
constqint64getTotalPlayerTime(void)const;
voidsetTotalPlayerTime(constqint64time);
constqint64getCurrentPlayerTime(void)const;
voidsetCurrentPlayerTime(constqint64time);
///歌曲播放逻辑
QMediaPlayer&
currentMediaPlayer(void);
///歌曲列表获取逻辑
QMediaPlaylist&
musicPlayList(void);
QStringList&
songsNameList(void);
///歌曲歌词获取逻辑
voidgetCurrentSongLyric(void);
QList<
qint64>
&
lyricIndexList(void);
lyricContentList(void);
qint64m_totalPlayerTime;
qint64m_currentPlayerTime;
QMediaPlayerm_player;
SongsFile*m_songsFile;
QMediaPlaylistm_musicPlayList;
QStringListm_songsNameList;
m_lyricIndexList;
QStringListm_lyricContentList;
#endif//MUSICPLAYER_H
musicplayer.cpp的头文件如下:
QTime>
同时在cpp文件内写入了信号与槽传值连接的方法,代码如下:
MusicPlayer:
MusicPlayer(QObject*parent):
QObject(parent)
m_songsFile=newSongsFile(this);
m_songsFile->
initSongsListAndSongsNameList(m_musicPlayList,m_songsNameList);
m_player.setPlaylist(&
m_musicPlayList);
m_player.setVolume(INIT_SYSTEM_VOLUME);
connect(&
m_player,SIGNAL(durationChanged(qint64)),
this,SLOT(slotDurationChanged(qint64)));
m_player,SIGNAL(positionChanged(qint64)),
this,SLOT(slotPositionChanged(qint64)));
得到siganl后相应执行的槽函数(position),具体代码如下:
voidMusicPlayer:
slotPositionChanged(qint64position)
m_currentPlayerTime=position/TIME_MS_DURATION;
//歌曲进度条显示
QTimecurrentTime((m_currentPlayerTime/3600)%60,(m_currentPlayerTime/60)%60,
m_currentPlayerTime%60,(m_currentPlayerTime*1000)%1000);
QTimetotalTime((m_totalPlayerTime/3600)%60,(m_totalPlayerTime/60)%60,
m_totalPlayerTime%60,(m_totalPlayerTime*1000)%1000);
QStringupdateTime=currentTime.toString("
mm:
ss"
)
+"
/"
+totalTime.toString("
emitsignalPositionChanged(updateTime);
slotDurationChanged(qint64duration)
m_totalPlayerTime=duration/TIME_MS_DURATION;
//TIME_MS_DURATION1000
emitsignalDurationChanged(m_totalPlayerTime);
以及对播放时间、播放列表等的声明,代码如下:
constqint64MusicPlayer:
getTotalPlayerTime(void)const
returnm_totalPlayerTime/TIME_MS_DURATION;
//INIT_SYSTEM_VOLUME50
setTotalPlayerTime(constqint64time)
m_totalPlayerTime=time;
getCurrentPlayerTime(void)const
returnm_currentPlayerTime;
setCurrentPlayerTime(constqint64time)
m_currentPlayerTime=time;
QMediaPlayer&
currentMediaPlayer(void)
returnm_player;
QMediaPlaylist&
musicPlayList(void)
returnm_musicPlayList;
QStringList&
songsNameList(void)
returnm_songsNameList;
getCurrentSongLyric(void)
LyricsFilelyricsFile;
m_lyricIndexList.clear();
m_lyricContentList.clear();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Qt 音乐 播放 课程设计 报告