《四》实现动态时间、歌曲信息动态字幕和总结

上一期我们实现了切换歌曲,进度条等操作,那么这一期就是最后一期,把所有操作都实现。

实现动态时间:

void MainWindow::HandleLCDNumberTimeChangeFunc(qint64 duration)
{
    int Second=duration/1000;
    int Minute=Second/60;
    Second=Second%60;
    QString strSongTime=QString::asprintf("%d%d",Minute,Second);
    ui->lcdNumber_time->display(strSongTime);
}

 首先获取歌曲的总时长(s),根据总秒数,获取分钟及剩余秒数。然后把总时间放到显示上就可以了。

void MainWindow::HandleProgressTimeChangeFunc(qint64 dration)
{
    //设置进度条最大值
    ui->horizontalSlider_Play->setMaximum(dration);

}

void MainWindow::HandlePositionChangeFunc(qint64 position)
{
    if(ui->horizontalSlider_Play->isSliderDown()){
        return;
    }
    //设置滑动条位置
    ui->horizontalSlider_Play->setSliderPosition(position);
}

这两个函数就是实现根据进度条的变化调整播放歌曲位置。

实现动态展示:

实现动态字幕显示我们要专门去定义变量和槽函数:

public:
    //处理动态字幕
    QString strTitles;
    int iTitleChar;

    //自定义槽函数
public slots:
    //处理播放歌曲字幕
    void TitleMoveCaptionChar();

还要添加一个控件去放置这个字幕。

直接在ui文件中添加一个label就可以,把他的风格设置成跟下面的一样即可:

风格:

font-size:14px;\ncolor:rgb(255,255,255);\nbackground-color: rgba(255, 255,255, 50);

我们在cpp文件里去实现:

void MainWindow::HandleProgressTimeChangeFunc(qint64 dration)
{
    //设置进度条最大值
    ui->horizontalSlider_Play->setMaximum(dration);

    int Value=P_Playerlist->currentIndex();
    QTextBlock qtextblock=docTextObject->findBlockByNumber(Value);
    QString strTtile=qtextblock.text();
    ui->label_MusicDisp->setText(strTtile);
}

我们之前定义的进度条最大值,下面value是用来获取当前歌曲的id,再通过QTextBlock函数获取文本内容,放到我们设置的label中。

这样的话我们会发现这个字幕不是动态显示的,

所以我们要在构造函数里去实现。

//处理标题显示歌曲信息显示字幕
    ui->label_MusicDisp->setFont(QFont("宋体",14,QFont::Normal));
    strTitles=ui->label_MusicDisp->text();
    //使用定时器来移动标题
    QTimer *p_moveTitle=new QTimer(this);
    connect(p_moveTitle,SIGNAL(timeout()),this,SLOT(TitleMoveCaptionChar()));
    p_moveTitle->start(1000);
  • 设置要显示文本的格式
  • 用定时器来连接这个显示字幕的槽函数
  • 定时器,启动!

这样就能够完成了。

进度条美化:

在构造函数中:

QString qss= "QSlider{"
                   "border: 1px solid rgb(16, 135, 209);"
                   "background: rgba(248,248,255,180);"
                   "border-radius: 6px; }"
                   "QSlider::chunk:enabled {"
                   "border-radius: 4px; "
                   "background: qlineargradient(x1:0, y1:0, x2:1, y2:0" ;
    qss.append(");}");
    ui->horizontalSlider_Play->setStyleSheet(qss);

可以设置很多风格,大家可以根据自己喜欢的来。

总结:

新手尝试,还有很多地方不足,比如:当你搜索的歌曲无法播放时,进程可能会卡死退出,也没有任何提示,搜是搜得到,后续也会慢慢去改进。

本篇内容也是对之前学习的总结,也能帮助更好的去学习如何使用api去实现自己想要的功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值