在使用Qt编写音乐播放器的时候,进度条关联播放音乐基本是必须的。那么在设计的过程中你可能会碰到一个奇怪的问题就是拖拽进度条的时候,可能会报错如下:
然后音乐就卡着不动了。。。
connect(ui->volume_toolButton,&VolumeToolBtn::volumeChange,this,
[this](const int value) {
// 将值转换为0.0到1.0之间
const float volume = static_cast<float>(value) / 100;
this->m_audioOutput->setVolume(volume); // 设置音量
});
connect(this->m_player.get(), &QMediaPlayer::positionChanged,this, &KuGouApp::updatePositionLab);
connect(this->m_player.get(), &QMediaPlayer::durationChanged, this, &KuGouApp::updateSliderRange);
connect(ui->progressSlider,&QSlider::sliderReleased,
this,&KuGouApp::updateSliderPosition);
******************************
void KuGouApp::updatePositionLab(int position) {
if(ui->progressSlider->isSliderDown())return;
ui->position_label->setText(QTime::fromMSecsSinceStartOfDay(position).toString("mm:ss"));
}
void KuGouApp::updateSliderRange(int duration) {
ui->progressSlider->setMaximum(duration);//一旦加上这一行就无法拖动进度条
ui->duration_label->setText(QTime::fromMSecsSinceStartOfDay(duration).toString("mm:ss"));
}
void KuGouApp::updateSliderPosition() {
//播放列表为空时,设置无法拖动,留待之后解决
this->m_player->setPosition(this->m_player->duration()*ui->progressSlider->value()/100);
this->m_player->play();
}
是不是想不明白为什么自己明明已经设置了在sliderReleased的时候让播放器setPosition。但却没有反应。。。
那是因为你的总时长被你修改了,但是在setPosition的时候
你还是用了固定的100。。。改成ui-> progressSlider->duration();即可