Skip to content

xing-sudo/MusicClient

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MusicClient — 仿 QQ 音乐本地播放器

基于 Qt6 Widgets 框架开发的本地音乐播放器桌面应用,界面风格仿照 QQ 音乐客户端。


项目截图


技术栈

技术 用途
C++17 核心语言
Qt6 Widgets UI 框架
QMediaPlayer 音频播放引擎
SQLite (Qt SQL) 本地数据持久化
QPropertyAnimation 动画效果
QSharedMemory 单实例防重复启动

功能特性

  • 🎵 多格式支持:MP3 / FLAC / M4A / WAV
  • 📋 播放列表管理:本地音乐 / 我喜欢 / 最近播放 三大列表
  • 🔀 播放模式切换:列表循环 / 单曲循环 / 随机播放
  • 📝 LRC 歌词同步:解析 LRC 文件,歌词跟随播放进度实时高亮滚动
  • 💾 数据持久化:SQLite 存储歌曲信息、喜欢状态、播放历史,重启后自动恢复
  • 🔔 系统托盘:关闭窗口最小化到托盘,支持托盘菜单还原/退出
  • 🪟 无边框窗口:自定义标题栏,支持鼠标拖动
  • 🔒 单实例保护QSharedMemory 防止程序重复启动

项目亮点

1. 基于 QEventLoop 的同步元数据解析

QMediaPlayer::setSource() 是异步操作,使用 QEventLoop + QTimer 超时保护机制将异步信号转为同步等待,在歌曲对象构造阶段即时获取歌名、歌手、专辑等元数据,元数据缺失时自动从文件名按 歌手-歌名 规则解析 fallback 信息。

2. 自主实现 LRC 歌词解析与滚动展示

手写 LRC 解析器提取时间戳与歌词文本,构建有序时间线列表。播放中以"中心行 ± 3 行"滚动窗口渲染当前歌词,配合 QPropertyAnimation 实现歌词页面弹出/收起动画。

3. 自定义侧边栏律动动画组件

封装 BtForm 自定义控件,使用四根 QPropertyAnimation 以不同周期(1500ms / 1800ms / 2100ms / 2400ms)驱动竖线循环伸缩动画,模拟音乐律动视觉效果。


构建环境

  • Qt 6.x
  • CMake 或 qmake(本项目使用 qmake,对应 MusicClient.pro
  • C++17 编译器(MSVC 2019+ 或 MinGW)
# 用 Qt Creator 打开 MusicClient.pro 直接构建
# 或命令行:
qmake MusicClient.pro
make

目录结构

MusicClient/
├── *.h / *.cpp      # 源文件
├── *.ui             # Qt Designer 界面文件
├── images/          # 图标与图片资源
├── *.qrc            # Qt 资源文件
└── MusicClient.pro  # qmake 工程文件

License

本项目仅用于个人学习与技术展示,不用于商业目的。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors