Skip to content
Serein edited this page Feb 1, 2024 · 5 revisions

我们已经完成了项目架构和前端UI的设计,需要你根据以下要求继续完成项目,使得程序可以如期运行。

必做

  1. 连接信号槽

信号槽是Qt的一大特性。在 Utility/MusicPlayerViewModel/PlayingSongViewModel 的构造函数中,请将合适的信号与槽相连接;

  1. 歌曲切换

ViewModel/NextUpViewModel 中,getNextSong() 方法返回播放队列中的下一首歌。请根据已有代码,完成在不同状态时歌曲切换逻辑。包括单曲循环,列表循环,列表随机;

  1. 播放歌单

目前歌单还不能完整播放。请阅读代码中 NexUpViewModel(播放列表) 、SongViewModel(歌单歌曲)与 LikedSongViewModel(喜欢歌单歌曲),理解已有函数的意图,完成 playAllSongs();

  1. 网络请求

ViewModel/SongLyricViewModel 中,仿照其他网络请求部分,将 loadSongLyric(SongId songId) 函数中网络请求的部分补全

Important

不要频繁请求同一网络接口,不要在短期内重复登录同一账号,不要在短时间内多次重启应用,以防IP被ban

  1. 数据处理

ViewModel/SongLyricViewModel 中定义新的成员函数用于处理歌词字符串,参数类型为 QList<SongLyricEntity>(Service/NeteaseCloudMusic/Response/SongLyricEntity.h,返回 QList<SongLyric> (Model/SongLyric.h) 类型的数据。函数功能为:将时间转换为以毫秒为单位的整数时间戳(quint64),并与歌词(Qstring)对应起来,并存入列表,最后返回列表,歌词翻译不做。

作为参数的歌词原始字符串样例为:

"[00:00.00] 作词 : 小柒\n[00:01.00] 作曲 : 九三\n[00:03.46]编曲:简吟\n[00:21.70]欲望汇成河川 难逃上岸\n[00:24.47]世事短 而今为一人叹\n[00:29.38]自此春秋不还 雪霁宵寒\n[00:32.05]世事难 明堂风雪皆染\n[00:37.39]醉后不知清梦满船\n[00:40.37]烟焚散 点琉璃灯千盏\n[00:43.97]梦回孤城把人间叹\n[00:46.88]自别离 叶满敬亭山\n[00:55.92]一愿歌尽人不散 待君还\n[00:59.50]二愿旧时故里归长安\n[01:03.61]三愿只身过千帆\n[01:05.92]再无相思寄南山\n[01:11.93]一念长征人未还 枕衾寒\n[01:15.42]二念旧时亭北倚斜阑\n[01:19.64]三念古灯佛前伴\n[01:22.43]再无爱恨不相关\n[01:27.09]\n[01:45.64]锦书寄托鸿雁 赴万里约\n[01:48.43]思华年 我见明灯三千\n[01:51.78]九万里初长夜 莫笑陈愿\n[01:56.30]冬日宴 愿岁岁常相见\n[02:00.98]赴一场惊鸿人间宴\n[02:04.38]不得见 在苍茫云海间\n[02:08.19]回顾尘缘昔昔成玦\n[02:11.03]骤雨歇 执手两无言\n[02:17.92]一愿歌尽人不散 待君还\n[02:21.45]二愿旧时故里归长安\n[02:25.46]三愿只身过千帆\n[02:28.10]再无相思寄南山\n[02:33.75]一念长征人未还 枕衾寒\n[02:37.51]二念旧时亭北倚斜阑\n[02:41.51]三念古灯佛前伴\n[02:44.02]再无爱恨不相关\n[02:49.56]\n[02:50.48]一愿歌尽人不散 待君还\n[02:53.40]二愿旧时故里归长安\n[02:57.35]三愿只身过千帆\n[03:00.40]再无相思寄南山\n[03:06.20]一念长征人未还 枕衾寒\n[03:09.64]二念旧时亭北倚斜阑\n[03:13.41]三念古灯佛前伴\n[03:15.92]再无爱恨不相关\n[03:20.97]\n[03:21.93]制作人:简吟\n[03:22.29]混音:小吴太太\n[03:22.73]和声:夏初安\n[03:23.37]笛/箫:囚牛\n[03:24.72]视觉:华玮轩\n[03:25.79]统筹:冰封\n[03:26.31]监制:潇喆Sean\n[03:26.69]OP/发行:鲸鱼向海(北京)文化有限公司\n[03:26.93](未经许可,不得翻唱翻录或使用)\n"

Tip

本任务建议单独开一个测试项目,在本地处理样例字符串即可,测试通过后再移植到项目中。验收时将使用另一首歌的歌词原始字符串做测试。

选做

  1. 前端界面:完成歌词展示,和点击歌词切换歌曲时间戳的逻辑 (ui/item/LyricRect.qml)
  2. 根据你的想法,添加自己喜欢的功能吧!

Note

允许在不破坏代码结构的前提下,在任意位置增改代码,包括但不限于:添加头文件、添加辅助函数

Clone this wiki locally