资源描述
山西大学
课程设计报告
题 目: 基于QT音乐播放器
系 别: 软件学院 班 级: 1522班
姓 名: 贾梦洁 学 号:
同组成员:
设计时间: 12月22日----12月30日
公司名称: 上海杰普软件科技有限公司
目 录
第一章 引言.......................................1
第二章 软件分析与设计.............................2
2.1软件需求分析........................................2
2.2开发环境............................................3
2.3软件概要设计........................................3
第三章 软件功能实现...............................4
3.1软件总体架构........................................5
3.2软件功能流程........................................5
3.3详细功能实现........................................6
第四章 软件测试..................................16
第五章 总结......................................17
第一章 引言
计算机技术飞速发展大大提高了人们工作效率,特别是互联网技术更是很大限度上丰富和以便了人们生活。近些年来,人们生活水平也在不断提高,在物质丰富条件下,人们开始在工作之余关注娱乐,盼望在其他方面释放工作压力,同步培养自己兴趣兴趣,随之而来是人们对多媒体应用关注,许多电影播放平台、音乐播放软件等逐渐进一步人们生活,并慢慢地成为人们生活重要构成某些。
当前,互联网上已经拥有大量音乐播放软件,这些软件是各个软件供应商商品核心构成某些,当前其实现技术较复杂,在功能方面相称完备且强大,如何简朴、高效、以便地设计实现一款小巧美观音乐播放器软件成为人们关注热点。基于该问题,本文设计并实现了基于Qt音乐播放软件,该软件可以便捷、高效地为顾客展示音乐播放界面,以便进行歌曲播放和控制功能。本文工作分为软件界面设计和软件功能实现两某些,其中,软件界面设计工作重要涉及顾客界面设计实现;各个功能模块实现工作重要涉及后台程序编码设计模块化完毕设计等内容。
该音乐播放软件以Qt开发平台中实现歌曲播放相应功能为基本框架设计,通过C++语言编程实现各个功能函数,软件设计方面采用模块化软件设计思想实现,具备和谐顾客交互界面和高承载能力运营稳定性。
第二章 软件分析与设计
2.1 软件需求分析
在设计实现音乐播放器软件同步,可以对当前存在不同类型音乐播放器进行广泛进一步研究,查看软件也许需要需求内容。因而,需要对详细问题进行详细分析,进一步挖掘其需要实现系统功能,以以便背面对软件构架设计工作。需求分析过程,是开发人员对音乐播放器工作过程结识与熟悉过程,也是对软件内部工作流程进行计算机建模过程,最后目是通过需求分析理解顾客需求实现功能,依照顾客提出需求设计好系统概念模型,对顾客提出需求进行计算机办法描述,并建立相应配套需求分析文档,设计好系统详细实现方案。
在设计实现基于Qt音乐播放器同步,考虑到音乐播放器实际工作环境,可以拟定是该软件应当拥有如下几种方面特性:
(1) 基本功能
随着电脑终端扩大化,PC机上各种软件也不计其数。为了使顾客体验及软件质量都达到一定完备性,咱们需要保证一定基本功能。基于人性化角度,开发设计基本功能,使顾客可以流畅使用软件。在进行功能划分过程当中,可以采用模块化功能设计思想,对功能划分尽量细致,做到不漏掉。例如,应当有播放模式选取,音乐列表选取,音量高低调试等。
(2) 稳定性
基于QT音乐播放器是一款娱乐软件,更需要保证软件稳定性,以使顾客体验达到最高。若播放器不稳定,则顾客体验这一指标则会大幅下降。
(3) 联通性
移动设备日益增长,微博、微信等交流平台在市场中也占据重要地位。为迎合这一现象,QT音乐播放器必要进行一定互联网联通性。可以进行音乐分享、转发评论等。这样可以实现软件之间交流结合,有助于软件推广。同步也有助于通过大数据分析,得到听众最爱慕听歌曲,符合大众口味。
2.2 开发环境
操作系统:Windows 10
开发平台: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头文献下,先对命名空间进行前向声明,对类内对象和办法进行声明,详细代码如下:
#ifndef SETTINGWIGET_H
#define SETTINGWIGET_H
#include <QWidget>
namespace Ui {
class settingwiget;
}
class settingwiget :public QWidget
{
Q_OBJECT
public:
explicit settingwiget(QWidget *parent = 0);
~settingwiget();
void initSystemSetting(void);
bool writeInit(QString path,QString user_key,QString user_value);
bool readInit(QString path,QString user_key,QString &user_value);
private slots:
void on_pb_save_clicked();
void on_pb_cancle_clicked();
void on_tb_lyricsPath_clicked();
void on_tb_songsPath_clicked();
void on_pb_save_destroyed();
private:
Ui::settingwiget *ui;
};
#endif // SETTINGWIGET_H
(2).cpp文献
配备文献写入和读取办法完毕在settingwiget.cpp文献内,代码如下:
settingwiget::settingwiget(QWidget *parent) :
QWidget(parent),
ui(new Ui::settingwiget)
{
ui->setupUi(this);
SongsFile::m_songPath.clear();
LyricsFile::m_lyricPath.clear();
}
settingwiget::~settingwiget()
{
delete ui;
}
bool settingwiget::writeInit(QString path,QString user_key,QString user_value)
{
if(path.isEmpty() || user_key.isEmpty())
{
return false;
}
else
{
//创立配备文献操作对象
QSettings *config = new QSettings(path,QSettings::IniFormat);
//将信息写入配备文献
config->beginGroup("config");
config->setValue(user_key,user_value);
config->endGroup();
return true;
}
}
bool settingwiget::readInit(QString path,QString user_key,QString &user_value)
{
user_value = QString("");
if(path.isEmpty() || user_key.isEmpty())
{
return false;
}
else
{
//创立配备文献操作对象
QSettings *config = new QSettings(path,QSettings::IniFormat);
//读取顾客配备信息
user_value = config->value(QString("config/") + user_key).toString();
return true;
}
}
界面设计中按钮详细功能也相应在settingwiget.cpp文献内,代码如下:
void settingwiget::on_tb_songsPath_clicked()
{
SongsFile::m_songPath = QFileDialog::getExistingDirectory();
ui->le_songsPath->setText(SongsFile::m_songPath);
}
void settingwiget::on_tb_lyricsPath_clicked()
{
LyricsFile::m_lyricPath = QFileDialog::getExistingDirectory();
ui->le_lyricsPath->setText(LyricsFile::m_lyricPath);
}
void settingwiget::on_pb_save_clicked()
{
writeInit(QString("../user.ini"),"SONGPATH",SongsFile::m_songPath);
writeInit(QString("../user.ini"),"LYRICPATH",LyricsFile::m_lyricPath);
initSystemSetting();
this->hide();
}
void settingwiget::on_pb_cancle_clicked()
{
this->hide();
}
void settingwiget::initSystemSetting(void)
{
readInit(QString("../user.ini"),"SONGPATH",SongsFile::m_songPath);
readInit(QString("../user.ini"),"LYRICPATH",LyricsFile::m_lyricPath);
ui->le_songsPath->setText(SongsFile::m_songPath);
ui->le_lyricsPath->setText(LyricsFile::m_lyricPath);
}
void settingwiget::on_pb_save_destroyed()
{ }
其中,cpp文献内头文献为:
#include "settingwiget.h"
#include "ui_settingwiget.h"
#include <QFileDialog>
#include <QSettings>
#include <QDebug>
#include "musicplayer.h"
#include "musicwiget.h"
#include "songsfile.h"
#include "lyricsfile.h"
导入歌曲页面设计完毕在界面设计settingwiget.ui文献下,如下图所示:
详细对象为:
3.3.2歌曲播放某些功能
(1).h文献
musicplayer.h头文献下,采用枚举类型对播放模式进行声明,写入信号和槽以便传值,对歌曲播放逻辑、歌曲列表获取逻辑、歌曲歌词获取逻辑对象、办法进行声明,详细代码如下:
#ifndef MUSICPLAYER_H
#define MUSICPLAYER_H
#include <QObject>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QList>
#include "songsfile.h"
#include "lyricsfile.h"
#define TIME_MS_DURATION 1000
#define INIT_SYSTEM_VOLUME 50
enum PlaybackMode //播放模式
{
CURRENT_ITEM_ONCE = 0, //单曲播放
CURRENT_ITEM_IN_LOOP = 1, //单曲循环
SEQUENTIAL = 2, //顺序播放
LOOP = 3, //列表循环
RANDOM = 4 //随机播放
};
class MusicPlayer :public QObject
{
Q_OBJECT
signals:
void signalPositionChanged(QString updateTime);
void signalDurationChanged(qint64 duration);
public slots:
void slotPositionChanged(qint64 position);
void slotDurationChanged(qint64 duration);
public:
explicit MusicPlayer(QObject *parent = 0);
const qint64 getTotalPlayerTime(void) const;
void setTotalPlayerTime(const qint64 time);
const qint64 getCurrentPlayerTime(void) const;
void setCurrentPlayerTime(const qint64 time);
/// 歌曲播放逻辑
QMediaPlayer ¤tMediaPlayer(void);
/// 歌曲列表获取逻辑
QMediaPlaylist &musicPlayList(void);
QStringList &songsNameList(void);
/// 歌曲歌词获取逻辑
void getCurrentSongLyric(void);
QList<qint64> &lyricIndexList(void);
QStringList &lyricContentList(void);
private:
/// 歌曲播放逻辑
qint64 m_totalPlayerTime;
qint64 m_currentPlayerTime;
QMediaPlayer m_player;
/// 歌曲列表获取逻辑
SongsFile *m_songsFile;
QMediaPlaylist m_musicPlayList;
QStringList m_songsNameList;
/// 歌曲歌词获取逻辑
QList<qint64> m_lyricIndexList;
QStringList m_lyricContentList;
};
#endif // MUSICPLAYER_H
(2).cpp文献
musicplayer.cpp头文献如下:
#include "musicplayer.h"
#include <QTime>
#include "musicwiget.h"
同步在cpp文献内写入了信号与槽传值连接办法,代码如下:
MusicPlayer::MusicPlayer(QObject *parent) :QObject(parent)
{
m_songsFile = new SongsFile(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)));
connect(&m_player,SIGNAL(positionChanged(qint64)),
this,SLOT(slotPositionChanged(qint64)));
}
得到siganl后相应执行槽函数(position),详细代码如下:
void MusicPlayer::slotPositionChanged(qint64 position)
{
m_currentPlayerTime = position / TIME_MS_DURATION;
//歌曲进度条显示
QTime currentTime((m_currentPlayerTime/3600)%60,(m_currentPlayerTime/60)%60,
m_currentPlayerTime%60,(m_currentPlayerTime*1000)%1000);
QTime totalTime((m_totalPlayerTime/3600)%60,(m_totalPlayerTime/60)%60,
m_totalPlayerTime%60,(m_totalPlayerTime*1000)%1000);
QString updateTime = currentTime.toString("mm:ss")
+ "/"+ totalTime.toString("mm:ss");
emit signalPositionChanged(updateTime);
}
void MusicPlayer::slotDurationChanged(qint64 duration)
{
m_totalPlayerTime = duration / TIME_MS_DURATION; //TIME_MS_DURATION 1000
emit signalDurationChanged(m_totalPlayerTime);
}
以及对播放时间、播放列表等声明,代码如下:
const qint64 MusicPlayer::getTotalPlayerTime(void) const
{
return m_totalPlayerTime / TIME_MS_DURATION; //INIT_SYSTEM_VOLUME 50
}
void MusicPlayer::setTotalPlayerTime(const qint64 time)
{
m_totalPlayerTime = time;
}
const qint64 MusicPlayer::getCurrentPlayerTime(void) const
{
return m_currentPlayerTime;
}
void MusicPlayer::setCurrentPlayerTime(const qint64 time)
{
m_currentPlayerTime = time;
}
QMediaPlayer &MusicPlayer::currentMediaPlayer(void)
{
return m_player;
}
QMediaPlaylist &MusicPlayer::musicPlayList(void)
{
return m_musicPlayList;
}
QStringList &MusicPlayer::songsNameList(void)
{
return m_songsNameList;
}
void MusicPlayer::getCurrentSongLyric(void)
{
LyricsFile lyricsFile;
m_lyricIndexList.clear();
m_lyricContentList.clear();
lyricsFile.getCurrentSongLyric(m_lyricIndexList,m_lyricContentList);
}
QList<qint64> &MusicPlayer::lyricIndexList(void)//歌词索引列表
{
return m_lyricIndexList;
}
QStringList &MusicPlayer::lyricContentList(void)//歌词内容列表
{
return m_lyricContentList;
}
第四章 软件测试
软件实现截图如下:
(1) 主界面
(2) 第二界面
(3) 最小化
第五章 总结
本次所设计基于Qt音乐播放器软件,在Windows系统环境下可以成功运营,对于预期功能目的已经基本实现,其中涉及歌曲选取,歌曲打开,歌曲播放,歌曲暂停,显示歌曲播放进度条等功能。该软件开发是在Qt Creator开发环境下完毕程序编写工作,该开发平台简朴以便,操作快捷,可以直接在Windows系统平台下安装运营,完毕代码编写后,只需要直接点击编译和运营即可使音乐播放器开始工作,按顾客选取进行歌曲播放等功能,具备一定实用性。
通过本次毕业设计,我终于明白了“看一万行代码,不如动手写一行代码”这一句真理,对于工科类学生来说,除了加强对对课本里理论知识学习之外,更重要是培养自己实践动手能力。这次毕业设计,让我后来面对困难时变得更有耐心,对我来说,这一精力都是在后来生活和学习中很宝贵财富,极大影响我后来成长和发展道路。
开发时间限制,咱们小组实现了系统基本功能,软件可以实现基本功能,但是界面尚不够美观,系统也不够完善,下一步,咱们会继续改进系统。本次设计以及系统实现让咱们结识到了此前诸多没有注意到细节问题,让我学到了不少新知识。
展开阅读全文