目录
音乐播放器 3
一、概述 3
主要内容: 3
已实现的目标: 3
二、主要类的设计 3
1)依次介绍各个主要类的设计: 3
2)综上所述,各个类之间的关系大致如下图所示: 6
三、程序的功能特点和运行操作方法 6
四、实现中值得一提的地方 12
1)歌曲图片 12
2)歌词展示 12
3)在Qt Designer 中使用自定义的部件 12
4)界面设计总结 12
音乐播放器
一、概述

主要内容:

利用Qt5 GUI 框架及其中的音频播放模块,完成了一个小巧、界面精美的本地音乐播放器。支持添加本地音乐、添加歌单、歌词查看、自定义背景、系统托盘控制播放等。同时, 使用SQLite 本地数据库保存已添加的音乐、歌单的信息,本文转载自http://www.biyezuopin.vip/onews.asp?id=15252且使用.ini 文件记录应用设置信息。

已实现的目标:

界面精美且支持自定义背景
支持播放的音乐格式:.mp3 文件、.flac 文件、.mpga 文件
支持解析并展示歌词文件(.lrc 文件)
支持解析歌曲信息(专辑、比特率、缩略图等等)
支持歌单管理
系统托盘可控制播放
数据库保存已添加的歌曲和歌单信息

二、主要类的设计

1)依次介绍各个主要类的设计:

a) Music 类
代表一首歌曲。记录着歌曲相关信息,其中最为重要的是歌曲的 url 信息(即:歌曲文件所在的路径),播放的时候需要根据 url 来将歌曲文件加入播放器。还记录下的一些其他的歌曲信息,可见于下图。
部分数据成员及成员函数展示:

#include "Music.h"
#include <QMediaPlayer>
#include <QCoreApplication>
#include <QMessageBox>
#include <QtSql>Music::Music(QUrl iurl)
{url=iurl;refreshInfo();
}extern QString formatTime(qint64 timeMilliSeconds);
void Music::refreshInfo()
{QMediaPlayer tempPlayer;tempPlayer.setMedia(url);//元数据的解析需要时间,所以这里需要循环等待(但同时需要保持Qt事件处理机制在运行)while(!tempPlayer.isMetaDataAvailable()){QCoreApplication::processEvents();}QStringList list=tempPlayer.availableMetaData();//调试时查看有哪些元数据可用if(tempPlayer.isMetaDataAvailable()){//歌曲信息author = tempPlayer.metaData(QStringLiteral("Author")).toStringList().join(",");//author = tempPlayer.metaData(QStringLiteral("Author")).toString(); //查手册发现,这里返回的是StringList//author=tempPlayer.metaData(QStringLiteral("ContributingArtist")).toStringList().join(","); //另一种元数据title = tempPlayer.metaData(QStringLiteral("Title")).toString();albumTitle = tempPlayer.metaData(QStringLiteral("AlbumTitle")).toString();audioBitRate = tempPlayer.metaData(QStringLiteral("AudioBitRate")).toInt();duration=tempPlayer.duration();}
}QString Music::getLyricFile()
{QString mp3FilePath=url.toLocalFile();mp3FilePath.replace(".mp3",".lrc");mp3FilePath.replace(".flac",".lrc");mp3FilePath.replace(".mpga",".lrc");return mp3FilePath;
}QString Music::getInfo() const
{return author+" - "+title+" ["+formatTime(duration)+"]";
}void Music::detail()
{QString info("歌曲名:%1\n艺术家:%2\n时长:%3\n唱片集:%4\n比特率:%5\n文件路径:%6");info=info.arg(title,author,formatTime(duration),albumTitle,QString::number(audioBitRate)+"bps",url.toString());QMessageBox::about(Q_NULLPTR,"歌曲信息",info);
}void Music::insertSQL(const QString &name)
{QSqlQuery sql_query;QString insert_sql = "insert into MusicInfo values (?, ?, ?, ?, ?, ?, ?)";sql_query.prepare(insert_sql);sql_query.addBindValue(name);sql_query.addBindValue(url.toString());sql_query.addBindValue(author);sql_query.addBindValue(title);sql_query.addBindValue(duration);sql_query.addBindValue(albumTitle);sql_query.addBindValue(audioBitRate);sql_query.exec();
}bool MusicCompare::operator()(const Music &A, const Music &B)
{switch (key) {case TITLE:return A.title<B.title;case AUTHOR:return A.author<B.author;case DURATION:return A.duration<B.duration;case EQUALITY:return A.getUrl()==B.getUrl();default:return A.getInfo()<B.getInfo();}
}















基于Qt5GUI框架+SQLite的音乐播放器相关推荐

  1. 基于VUE框架的网页音乐播放器(可自适应手机布局)

    该项目是大三上学期学VUE课程老师带我们做的一个项目,整个布局使用VUE框架,界面简洁,功能简单.apI是使用网易云音乐的API. 一.项目展示 二.项目代码 我使用的软件是VScode,该项目的代码 ...

  2. 基于Android的MediaPlayer的音乐播放器的封装

    基于Android的MediaPlayer的音乐播放器的封装 使用过android原生的mediaplayer来做音频播放的同学们,肯定是经历过一些痛苦的,因为android提供了一个状态机,确实这个 ...

  3. 基于嵌入式linux的音乐播放器设计,基于嵌入式Linux的多媒体音乐播放器的设计与实现...

    中图分类号:TP316.5 文献标识码:A 文章编号:1009-2552(2009)06-0102-03 基于嵌入式Linux的多媒体音乐播放器的设计与实现 王 奇 (黑龙江八一农垦大学信息技术学院, ...

  4. Linux下基于Libmad库的MP3音乐播放器编写

    linux下基于Libmad库的MP3音乐播放器编写 libmad是一个开源mp3解码库,其对mp3解码算法做了很多优化,性能较好,很多播放器如mplayer.xmms等都是使用这个开源库进行解码的: ...

  5. [嵌入式Linux项目实战开发]基于QT4.7.4的音乐播放器实现与设计【2018年给力项目】

    [嵌入式Linux项目实战开发]基于QT4.7.4的音乐播放器实现与设计[2018年给力项目]是[创科之龙]团队aiku嵌入式视频教程系列制作的现有的音乐播放器. 主要功能实现: 1.新建工程,基类选 ...

  6. 基于RT-Thread+STM32F407的蜂鸣器音乐播放器

    本项目为RT-Thread学习项目,参考于RT-Thread官网Demo示例 硬件基于STM32F407ZGT6正点原子探索者开发板+无源蜂鸣器模块 RTOS软件基于RT-Thread 4.0.5版本 ...

  7. 【041】基于51单片机的自动音乐播放器Proteus仿真设计

    一.压缩包资料内容 (1).基于51单片机的自动音乐播放器系统proteus仿真设计一份: (2).基于51单片机的自动音乐播放器系统proteus仿真设计keli源代码一份: (3).基于51单片机 ...

  8. 基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署

    基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目 ...

  9. 基于微信小程序java音乐播放器毕业设计论文/程序代码

    摘  要 5G时代已经慢慢的融入了我们的日常生活,随着国家的通信政策以及各大运营商的宣传的影响,5G手机已经随处可见,面对全球信息.技术空前高速发展,信息高速化发展更是社会进步的一个标志.在全球信息化 ...

最新文章

  1. 每天一道LeetCode-----将单词数组分成多行,每行长度相同,单词之间用空格分隔,要求空格尽量均匀分布
  2. Python学习笔记----try...except...else
  3. 模型视图控制器mvc
  4. CentOS 下使用yum 命令安装MySQL
  5. 牛客 2021年度训练联盟热身训练赛第二场 I题Pegasus Circle Shortcut
  6. AE中Identify查询工具的实现
  7. Spring AOP原理详解及实例
  8. 图解3GPP规范文档组织结构与编号规则
  9. re,正则表达式,requests,爬取小猪短租网
  10. java检测kafka是否连接成功,Kafka 消费者失败检测
  11. G、S、C、P、T STATE
  12. Xilinx ZYNQ简介
  13. linux中三台主机之间互信,22、linux的ssh互信配置
  14. 根轨迹的基本概念与绘制
  15. java web 统计在线用户_Javaweb监听器实例之统计在线人数
  16. 考研最卷的专业,我提名新传
  17. 电子计算机显示屏不亮了,电脑显示屏不亮怎么回事|电脑显示屏不亮如何处理...
  18. 如何衡量品牌营销效果?四大指标为王道
  19. 理解tfrecord读取数据——错误OutOfRangeError (see above for traceback)的解决
  20. php命名空间_PHP命名空间

热门文章

  1. 害你加班的bug就是我写的,记一次升级Jenkins插件引发的加班
  2. [字符数和标点数] Python
  3. 技术经济学(刘秋华)(第三版)——第三章 经济型评价的基本要素
  4. 【树莓派】树莓派小车(一)小车配件选购及安装(多图)
  5. 精益可视化管理六原则
  6. 腾讯智慧校园 php,【腾讯智慧校园1.54版本】发布
  7. jquery.base64.js 使用
  8. C语言入门第二章-分支循环语句
  9. nrf51822之间通讯
  10. 2023年数学建模国赛:灰色预测模型与MATLAB实战案例(Matlab代码)