2017-04-01 112 views
1

我使用Qt 5.7 我正在寫音樂播放器,並有一個問題。方法duration()QMediaPlayer總是返回0.我該如何解決它?代碼QMediaPlayer持續時間()總是返回0

例子:

QMediaPlayer *player = new QMediaPlayer; 
player->setMedia(QMediaContent(QUrl(path))); 
qDebug() << player->duration(); // returns 0 
player->play(); // it works 
+0

請編輯您的問題以包含[mcve](https://stackoverflow.com/help/mcve)。另請注意,根據[文檔](http://doc.qt.io/qt-5/qmediaplayer.html#duration-prop),「初始播放開始時可能無法使用」持續時間。 –

回答

0

您不能player->setMedia(QMediaContent(QUrl(path)));後立即做了player->duration()

事實上,QMediaPlayer::setMedia異步所以如果你後馬上打電話期間,媒體將還沒有加入,然後持續時間將是錯誤的。

Qt documentation on setMedia

注:此功能記錄指定的媒體源後立即返回。它不會等待媒體完成加載,也不會檢查錯誤。

當持續時間更新時,QMediaPlayer發送一個名爲durationChanged(qint64 duration)的信號。所以你需要做的是將這個信號連接到一個lambda或一個插槽。

例如,

QMediaPlayer *player = new QMediaPlayer(this); 
connect(player, &QMediaPlayer::durationChanged, this, [&](qint64 dur) { 
    qDebug() << "duration = " << dur; 
}); 
QUrl file = QUrl::fromLocalFile(QFileDialog::getOpenFileName(this, tr("Open Music"), "", tr(""))); 
if (file.url() == "") 
    return ; 
player->setMedia(file); 
qDebug() << player->duration(); 
player->setVolume(50); 
player->play(); 

第一qDebug會寫0爲您但是在lambda第二個會寫QMediaPlayer的新的持續時間。

+0

鏈接不起作用 – Vlad

+0

@Vlad這是對的我真的很抱歉。它現在正在工作! –

+0

我不需要那個。我的應用播放音樂,但「duration()」方法總是返回0.我需要獲取音頻的長度。 – Vlad