【C++】QT | 音乐播放器初级 源文件

前置内容在上一篇【C++】QT | 音乐播放器初级

加载文件需要文件相关,而lrc文件适合用map容器匹配,用计时器来更新歌词:

#include <QMap>                                 // map容器
#include <QFile>                                // 文件相关
#include <QTimer>
public:
    void ReadLRC(const QString & filepath);			// 读取对应路径的歌词文件

public slots:
    void SetLRC();							      // 槽函数,更新歌词

private:
    std::map<long long, QString> LRCMap;			// map容器,存储歌词:<时间, 歌词>
    QTimer timer;								  // 设置定时器

在ui中增加label_LRC,并调节大小。

读取歌词文件:

ReadLRC("E:\\252QT\\202401\\Test\\music\\千百度.lrc");

......
    
long long StrToMsec(const QString & timeStr)    // 传入QString对象,传回时间(毫秒)
{
   
    auto leftList = timeStr.split(":");         // 先分出分钟
    if(leftList.size() != 2)                    // 没有成功分割为两段时退出
        return 0;
    auto Min = leftList[0].toInt();             // 字符第一段转为数字,即分钟

    auto rightList = leftList[1].split(".");    // 剩下的字符按.分割
    if(rightList.size() != 2)                   // 失败退出
        return 0;
    int sec = rightList[0].toInt();             // .第一段即秒
    int msec = rightList[1].toInt();            // 第二段即毫秒

    return msec + 1000 * sec + 1000 * 60 * Min; // 总毫秒
}
    
void Widget::ReadLRC(const QString & filepath)                      // 读取歌词文件
{
   
    LRCMap.clear();                                                 // 重置路径
    QFile file(filepath);
    if(file.open(QIODevice::ReadOnly) == true)                      // 以只读打开
    {
   
        QTextStream input(&file);                                   // 读入文件流
        while(input.atEnd() != true)                                // 不在末尾
        {
   
            QString content = input.readLine();                     // 读取一行
            QStringList LRCList = content.split("]");               // 分割时间与歌词
            if(LRCList.size() != 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值