上一期我们实现了切换歌曲,进度条等操作,那么这一期就是最后一期,把所有操作都实现。
实现动态时间:
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去实现自己想要的功能。