news 2026/4/3 7:48:41

基于Qt5(C++)+SQLite 开发的一个小巧精美的本地音乐播放器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于Qt5(C++)+SQLite 开发的一个小巧精美的本地音乐播放器

基于Qt5开发的一个小巧精美的本地音乐播放器

一、概述

1.1 主要内容:

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

1.2 已实现的目标:

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

二、主要类的设计

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

Music 类

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

MusicList 类

MusicList 类将 Music 类组织为一个一维结构,便于管理。它表示的是一个歌单,里面包着对歌曲列表进行管理的相关方法。

MusicListWidget 类

以列表形式展示歌曲时,会用到 Qt 中的 QListWidget 组件,而直接使用 QListWidget 组件因为没有结合 MusicList 这个数据结构,所以不太方便管理。因此,MusicListWidget 继承了 QListWidget,它在类中包含 MusicList 类,这样可以将 MusicList 中的歌曲信息方便地可视化展示出来,并且可以方便地对展示出来的歌曲进行管理。

部分数据成员及成员函数展示:

MusicListDialog类

继承于 QDialog 类,在添加歌曲到“我喜欢”和歌单时,用于选择歌曲。这里使用自定义对话框主要为了:① 便于独立使用一个.ui 文件进行界面设计;② 便于获取歌曲数据(即本地音乐有哪些歌曲),以及返回选择结果。

部分数据成员及成员函数展示:

LyricWidget类

继承 QWidget,一个矩形区域,包含有用于显示歌词的几个文本框(QLabel),用于显示歌词。这里使用自定义的 Widget,也是便于独立使用一个.ui 文件进行界面设计。同时这样做,而不是在主窗口中直接显示歌词的文本框。也使得主窗口组件模块化,更加有条理。

此类的主要功能就是解析歌词文件,且按播放进度显示。

部分数据成员及成员函数展示:

MainWidget类

主窗口,用户直接交互的一个窗口组件。负责初始化、处理播放器相关事件、响应用户交互事件(点击、拖动等)等等工作。主要使用.ui 文件在 Qt 设计师中完成界面设计。

部分数据成员及成员函数展示:

2.2 综上所述,各个类之间的关系大致如下图所示:

三、程序的功能特点和运行操作方法

<关于可执行程序的一些说明> 可执行程序为单个.exe 文件。使用“Desktop Qt 5.9.8 MinGW 32bit”构建套件在 Release 模式下生成,然后使用 Enigma Virtual Box 软件将动态 DLL 库文件及其他相关文件打包生成了单个的一个.exe 文件。 第一次运行后,会在同目录下产生两个文件:a)Music.db 文件。SQLite 本地数据库文件,存储已添加到播放器的歌曲的信息;b)LightMusicPlayer.ini 文件。保存用户设置信息,即如果设置了自定义背景图片,会在此配置文件中记录下图片文件的路径。

双击运行即可打开。打开后,可通过点击左上角的图标或者右上方的“关于”按钮,弹出本软件的“关于”信息,其中包含一些说明和操作方法。

点击右下方绿色的按钮(或者使用快捷键“Ctrl+O”),可添加本地音乐。在弹出的窗口中,进入存放音乐文件的目录下,按下“Ctrl+A”全选,再点击打开即可完成添加(此过程中会自动过滤掉不支持播放的文件类型,所以此时用户不用手动筛选添加文件的类型)。

添加本地音乐操作,也可以直接拖拽文件至主窗口界面来完成,也会自动筛选文件类型。

从上图也可看出,播放器主窗口有四个的圆角(值为 10px),界面更加和谐。

添加后,本地音乐列表显示已添加的歌曲。上方的按钮分别表示:清空、整理歌曲(排序且去除重复)、按歌手排序、按歌曲名排序、按时长排序。

此时,双击某首歌曲,即可添加到当前播放,并且开始播放。下方会显示歌曲信息及歌曲图片。同时,当前播放列表中正在播放的歌曲的图标会有所不同。

点击下方的歌词按钮,可进入歌词显示界面。

在本地音乐和当前播放列表中,右键点击某歌曲,可以弹出右键菜单。

点击我喜欢左侧的加号,可批量从“本地音乐”中添加歌曲。弹出如下的对话框。

添加完成后,如下。(同样也支持右键菜单)

点击加号,新建歌单。同时,右键可删除歌单。

双击歌单名字即可进入对应的歌单详情列表。其中的操作与“我喜欢”列表类似。

右上角按钮,可更换背景图片、最小化,以及关闭主窗口。

主窗口关闭后,并不会退出播放器,而是最小化到了系统托盘。系统托盘实时显示正在播放的歌曲,且可通过右键菜单控制播放。

四、实现中值得一提的地方

4.1 歌曲图片

平时从 QQ 音乐等播放器上下载的 MP3 歌曲文件,在 Windows 资源管理器中查看的时候,会有图片显示(专辑图)。所以一开始猜想,歌曲的图片信息也是存储在 MP3 文件中,那 Qt 的库函数可以解析出来吗?最终,查阅手册和根据这个 找到了方法。只需要在解析歌曲文件时候,获取名为” ThumbnailImage”(缩略图)的元数据即可。

4.2 歌词展示

这里使用了 Qt 中的正则表达式来解析标准的 LRC 歌词文件,主要是需要识别出歌词的时间点,如下图。

然后在播放的时候,根据播放进度,比较时间点的先后,在对应的 QLabel 上展示出相应位置的歌词。

4.3 在 Qt Designer 中使用自定义的部件

主窗口的界面设计主要使用.ui 文件完成,而主窗口中的部分组件使用的是自定义的部件(比如 MusicListWidget 和 LyricWidget),但是 Qt Designer 左侧可拖拽出的部件都是Qt 中的自带部件,那么如何使用自定义部件在 Qt Designer 中完成设计呢?

这里可以使用“部件提升”功能,在右侧的“对象与类”窗口,右键,选择“提升为”,即可将某个 Qt 中的标准部件,修改为使用自定义的部件(该部件必须继承自对应的标准部件)。

4.4 界面设计总结

  • 字体使用“微软雅黑”的粗体比较美观;
  • 方框背景设定为白色,且设置一定的透明度;
  • 善用.ui 文件同时结合 QSS 样式表进行设计,方便控制间距、位置等;
  • 图标的选择、颜色的使用、摆放位置等,注意是否和谐;
  • 图标的挑选可使用阿里巴巴矢量图标库
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/1 19:41:20

日期型可以用bigint?—— 用对了是神器,用错了是坑!

✅ 结论&#xff1a;可以&#xff01;但必须用对方法不是直接存日期&#xff08;如2025-12-17&#xff09;用bigint&#xff0c;而是用Unix时间戳&#xff08;整数&#xff09;表示时间。 &#x1f449; 正确用法&#xff1a;用BIGINT存从1970-01-01 00:00:00 UTC开始的秒数/毫…

作者头像 李华
网站建设 2026/3/21 9:31:33

NTT 成功开发基于氮化铝的毫米波晶体管实现“全球首款”高频运行

⚡ NTT 突破氮化铝晶体管瓶颈&#xff1a;攻克高阻难题&#xff0c;实现高频放大日本电信电话株式会社&#xff08;NTT&#xff09;通过设计一种新型的低电阻结构&#xff0c;成功解决了高铝组分氮化铝&#xff08;AlN&#xff09;材料中接触电阻高和沟道电阻高的难题。这一成果…

作者头像 李华
网站建设 2026/3/28 19:53:16

昭阳机型专属!7 步自定义开机 Logo,让电脑开机仪式感拉满~

每天打开昭阳笔记本&#xff0c;映入眼帘的都是默认开机画面&#xff0c;是不是总觉得少了点专属感&#xff1f;不管是想把开机 Logo 换成自己喜欢的图片、公司品牌标识&#xff0c;还是家人朋友的合照&#xff0c;让电脑更具个性化&#xff0c;很多昭阳用户都不知道该如何操作…

作者头像 李华
网站建设 2026/4/3 6:10:44

基于SpringBoot + Vue的推荐算法的智能快递分拣优化系统

文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 &#x1f49b;博主介绍&#…

作者头像 李华