程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> QMediaPlayer的duration問題

QMediaPlayer的duration問題

編輯:C++入門知識

QMediaPlayer的duration問題


遇到了一個坑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);
});

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved