QMediaPlayer duration() 始终返回 0



我使用 Qt 5.7我正在写音乐播放器,有一个问题。QMediaPlayer的方法duration()始终返回 0。我该如何解决它?

代码示例:

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

您不能在player->setMedia(QMediaContent(QUrl(path)));后立即执行player->duration()

事实上,QMediaPlayer::setMedia异步的,所以如果你在它之后调用持续时间,媒体就不会设置,然后持续时间就会出错。

来自setMedia上的Qt文档:

注意:此函数在录制指定的媒体源后立即返回。它不会等待媒体完成加载,也不会检查错误。

当持续时间更新时,QMediaPlayer 会发送一个名为 durationChanged(qint64 duration) 的信号。因此,您需要做的是将此信号与λ或插槽连接。

例如

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 的新持续时间

最新更新