遇到了一個坑QMediaPlayer::duration的坑.
這個坑是當你setMedia之後, 直接使用duration獲取播放時長會得到0, 出錯時候的代碼片段如下:
void MainWindow::slotPlayAudio(const QString &audioFilePath)
{
currentAudioFilePath_ = audioFilePath;
player_->setMedia(QUrl::fromLocalFile(audioFilePath));
player_->setVolume(50);
horizontalSliderMusic->setMinimum(0);
horizontalSliderMusic->setMaximum(player_->duration()); //這裡的duration返回是0, 從而導致之後處理進度的時候出錯
player_->play();
pushButtonPlay->setText("pause");
}針對這個問題文檔中對此描述是"The value may change across the
life time of the QMediaPlayer object and may not be available when initial playback begins"
要解決這個問題可以在響應durationChanged信號的槽中獲取duration, 這個時候duration是正確的, 如此可以使用諸如下面的代碼進行處理:
connect(player_, &QMediaPlayer::positionChanged, [this](qint64 position){
if(player_->duration() != horizontalSliderMusic->maximum())
{
horizontalSliderMusic->setMaximum(player_->duration());
}
horizontalSliderMusic->setValue(position);
});