这是一个基于 Qt/QML 技术栈开发的桌面音乐播放器应用,界面设计借鉴网易云音乐的现代化风格。项目采用 C++ 作为后端逻辑语言,结合 Qt Framework 实现核心功能,MySQL 作为数据存储方案,构建了一个完整的音乐播放生态系统。
- 前端架构:采用 QML 和 Qt Quick Controls 2 构建响应式用户界面,实现流畅的动画效果和直观的用户体验
- 后端服务:基于 C++ 和 Qt Network 模块封装 RESTful API,处理用户认证、音乐数据检索和播放列表管理
- 数据库设计:设计并实现规范化的关系型数据库模型,包含用户、歌手、专辑、歌曲等 8 个核心数据表,支持高效的音乐数据存储与查询
- 多媒体处理:集成 Qt Multimedia 模块,实现高质量音频解码、播放控制和实时进度同步
- 模块化架构:通过 Qt 的信号槽机制实现组件间解耦,提高代码可维护性和扩展性
- 性能优化:采用异步网络请求和数据库连接池技术,显著提升应用响应速度和并发处理能力
- 用户体验优化:实现智能缓存机制,减少重复网络请求;设计直观的播放控制和个性化推荐功能
- 跨平台兼容:基于 Qt 框架的跨平台特性,支持 Windows、macOS 和 Linux 系统部署
涵盖从用户注册登录、音乐搜索、在线播放到本地音乐管理的完整业务流程,支持播放列表、收藏夹、播放历史等个性化功能,满足现代音乐播放器的核心需求。
- 用户认证系统:完整的用户注册、登录和会话管理功能
- 音乐播放控制:支持播放、暂停、停止、上一首、下一首等基本播放控制
- 进度管理:实时显示和控制音乐播放进度
- 在线音乐搜索:通过网络请求获取在线歌曲和推荐歌单
- 个性化推荐:根据用户喜好推荐相关音乐内容
- 播放列表管理:创建、编辑和管理个人播放列表
- 收藏功能:支持用户收藏喜欢的歌曲和专辑
- 播放历史记录:自动记录用户的播放历史
- 系统设置:提供音量控制、主题切换等个性化设置选项
- 前端界面:QML + Qt Quick Controls 2
- 后端逻辑:C++ with Qt Framework
- 数据库:MySQL 8.0+
- 网络通信:Qt Network 模块 (TCP/HTTP)
- 音频处理:Qt Multimedia 模块
- 开发环境:Qt Creator / Visual Studio with Qt Plugin
- 构建系统:CMake / QMake
- 版本控制:Git
- Qt 5.15 或更高版本
- C++ 编译器 (MSVC 2019+/GCC 7+/Clang 6+)
- MySQL 8.0 或更高版本
- CMake 3.16 或更高版本
git clone https://github.com/torbys/qml_music.git
cd qml_music-
创建 MySQL 数据库:
CREATE DATABASE music_player CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
执行数据库脚本初始化表结构(参考 backend.md)
-
修改数据库连接配置文件,设置正确的数据库连接参数
mkdir build
cd build
cmake ..
makeqmake ../qml_music.pro
make./qml_musicqml_music/
├── CPP/ # C++ 后端代码
│ ├── auth_handler.cpp # 用户认证处理
│ ├── auth_handler.h # 用户认证头文件
│ ├── database.cpp # 数据库操作实现
│ ├── database.h # 数据库操作头文件
│ ├── main.cpp # 程序入口点
│ ├── playlist_handler.cpp # 播放列表处理
│ ├── playlist_handler.h # 播放列表处理头文件
│ ├── server.cpp # 服务器相关实现
│ ├── server.h # 服务器相关头文件
│ ├── song_handler.cpp # 歌曲处理实现
│ ├── song_handler.h # 歌曲处理头文件
│ └── backend.md # 后端数据库设计文档
├── src/ # QML 前端代码
│ ├── Config/ # 配置文件
│ │ └── Configuration.qml # 全局配置和信号定义
│ ├── LeftPage/ # 左侧导航页面
│ │ └── LeftPage.qml # 左侧导航主文件
│ ├── PlayMusic/ # 音乐播放控制
│ │ └── PlayMusic.qml # 播放器主界面
│ ├── RightPage/ # 右侧主要内容页面
│ │ ├── TopTitle.qml # 顶部标题栏
│ │ ├── RightPage.qml # 右侧页面容器
│ │ └── StackPage/ # 各个功能子页面
│ │ ├── Like.qml # 我喜欢的音乐
│ │ ├── Recent.qml # 最近播放
│ │ ├── LocalMusic.qml # 本地音乐
│ │ ├── CloudMusic.qml # 云端音乐
│ │ ├── Community.qml # 社区
│ │ ├── DownloadManager.qml # 下载管理
│ │ ├── Setting.qml # 设置页面
│ │ ├── Podcast.qml # 播客
│ │ ├── SkinPages.qml # 皮肤设置
│ │ ├── cloudMusicCherryPick/ # 云端音乐精选
│ │ ├── podcast/ # 播客相关
│ │ └── SettingItems/ # 设置项子页面
│ ├── commonUI/ # 通用UI组件
│ │ ├── LoginPop.qml # 登录弹窗
│ │ ├── OtherLogin.qml # 第三方登录
│ │ ├── SelfLeftButton.qml # 自定义左侧按钮
│ │ └── ... # 其他通用组件
│ └── tiltle/ # 标题栏相关
│ ├── SearchTab.qml # 搜索标签
│ ├── MaxAndMin.qml # 最大化最小化按钮
│ └── UserSetting.qml # 用户设置
├── CMakeLists.txt # CMake 构建配置
└── main.qml # QML 入口文件
-
用户登录
- 启动应用后,点击右上角登录按钮
- 输入用户名和密码进行登录
- 支持第三方登录方式
-
音乐播放
- 在任何音乐列表中点击歌曲即可开始播放
- 使用底部播放控制条控制播放/暂停、上一首、下一首
- 拖动进度条调整播放位置
- 调整音量滑块控制音量大小
-
搜索功能
- 在顶部搜索框中输入歌曲名、歌手名或专辑名
- 点击搜索按钮或按回车键执行搜索
- 在搜索结果中点击歌曲进行播放
-
创建播放列表
- 在歌曲上右键选择"添加到播放列表"
- 在"我的音乐"->"播放列表"中管理自定义播放列表
-
收藏音乐
- 在歌曲上右键选择"收藏"或点击心形图标
- 在"我喜欢的音乐"中查看所有收藏的歌曲
-
个性化设置
- 进入"设置"页面调整播放器外观
- 自定义快捷键绑定
- 设置音质和下载偏好
-
下载管理
- 在歌曲上右键选择"下载"将音乐保存到本地
- 在"下载管理"中查看下载进度和管理已下载的音乐
-
社区互动
- 浏览社区发现更多音乐内容
- 关注其他用户查看他们的音乐分享
本项目使用 MySQL 作为后端数据库,设计了 8 个核心表来支持音乐播放器的各项功能:
- 用户表 (users) - 存储用户基本信息和认证数据
- 歌手表 (artists) - 存储歌手/艺术家信息
- 专辑表 (albums) - 存储专辑信息
- 歌曲表 (songs) - 存储歌曲详细信息
- 播放列表表 (playlists) - 存储用户创建的播放列表
- 播放列表歌曲关联表 (playlist_songs) - 存储播放列表中的歌曲
- 用户收藏表 (favorites) - 存储用户收藏的歌曲、专辑、歌手
- 播放历史表 (play_history) - 存储用户播放历史
详细的表结构和字段说明请参考 backend.md 文件。
- 音频文件: 本地文件系统存储,路径格式为
/storage/audio/{年}/{月}/{日}/{uuid}.mp3 - 图片文件: 本地文件系统存储,包括用户头像、歌手头像、专辑封面等
- 数据库记录: 在对应表的 url 字段中存储文件的相对路径或完整URL
本项目仅供学习和参考使用。
如有任何问题或建议,请联系项目维护者。