基于Qt5GUI框架+SQLite的音乐播放器
目录
音乐播放器 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的音乐播放器相关推荐
- 基于VUE框架的网页音乐播放器(可自适应手机布局)
该项目是大三上学期学VUE课程老师带我们做的一个项目,整个布局使用VUE框架,界面简洁,功能简单.apI是使用网易云音乐的API. 一.项目展示 二.项目代码 我使用的软件是VScode,该项目的代码 ...
- 基于Android的MediaPlayer的音乐播放器的封装
基于Android的MediaPlayer的音乐播放器的封装 使用过android原生的mediaplayer来做音频播放的同学们,肯定是经历过一些痛苦的,因为android提供了一个状态机,确实这个 ...
- 基于嵌入式linux的音乐播放器设计,基于嵌入式Linux的多媒体音乐播放器的设计与实现...
中图分类号:TP316.5 文献标识码:A 文章编号:1009-2552(2009)06-0102-03 基于嵌入式Linux的多媒体音乐播放器的设计与实现 王 奇 (黑龙江八一农垦大学信息技术学院, ...
- Linux下基于Libmad库的MP3音乐播放器编写
linux下基于Libmad库的MP3音乐播放器编写 libmad是一个开源mp3解码库,其对mp3解码算法做了很多优化,性能较好,很多播放器如mplayer.xmms等都是使用这个开源库进行解码的: ...
- [嵌入式Linux项目实战开发]基于QT4.7.4的音乐播放器实现与设计【2018年给力项目】
[嵌入式Linux项目实战开发]基于QT4.7.4的音乐播放器实现与设计[2018年给力项目]是[创科之龙]团队aiku嵌入式视频教程系列制作的现有的音乐播放器. 主要功能实现: 1.新建工程,基类选 ...
- 基于RT-Thread+STM32F407的蜂鸣器音乐播放器
本项目为RT-Thread学习项目,参考于RT-Thread官网Demo示例 硬件基于STM32F407ZGT6正点原子探索者开发板+无源蜂鸣器模块 RTOS软件基于RT-Thread 4.0.5版本 ...
- 【041】基于51单片机的自动音乐播放器Proteus仿真设计
一.压缩包资料内容 (1).基于51单片机的自动音乐播放器系统proteus仿真设计一份: (2).基于51单片机的自动音乐播放器系统proteus仿真设计keli源代码一份: (3).基于51单片机 ...
- 基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署
基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署 基于JAVAvue开发一个简单音乐播放器计算机毕业设计源码+数据库+lw文档+系统+部署 本源码技术栈: 项目 ...
- 基于微信小程序java音乐播放器毕业设计论文/程序代码
摘 要 5G时代已经慢慢的融入了我们的日常生活,随着国家的通信政策以及各大运营商的宣传的影响,5G手机已经随处可见,面对全球信息.技术空前高速发展,信息高速化发展更是社会进步的一个标志.在全球信息化 ...
最新文章
- 每天一道LeetCode-----将单词数组分成多行,每行长度相同,单词之间用空格分隔,要求空格尽量均匀分布
- Python学习笔记----try...except...else
- 模型视图控制器mvc
- CentOS 下使用yum 命令安装MySQL
- 牛客 2021年度训练联盟热身训练赛第二场 I题Pegasus Circle Shortcut
- AE中Identify查询工具的实现
- Spring AOP原理详解及实例
- 图解3GPP规范文档组织结构与编号规则
- re,正则表达式,requests,爬取小猪短租网
- java检测kafka是否连接成功,Kafka 消费者失败检测
- G、S、C、P、T STATE
- Xilinx ZYNQ简介
- linux中三台主机之间互信,22、linux的ssh互信配置
- 根轨迹的基本概念与绘制
- java web 统计在线用户_Javaweb监听器实例之统计在线人数
- 考研最卷的专业,我提名新传
- 电子计算机显示屏不亮了,电脑显示屏不亮怎么回事|电脑显示屏不亮如何处理...
- 如何衡量品牌营销效果?四大指标为王道
- 理解tfrecord读取数据——错误OutOfRangeError (see above for traceback)的解决
- php命名空间_PHP命名空间