我用的是Qt 5.7
我正在编写音乐播放器,有一个问题。方法duration()
of QMediaPlayer
总是返回 0。我该如何修复它?
代码示例:
QMediaPlayer *player = new QMediaPlayer;
player->setMedia(QMediaContent(QUrl(path)));
qDebug() << player->duration(); // returns 0
player->play(); // it works
你不能做一个player->duration()
就在之后player->setMedia(QMediaContent(QUrl(path)));
.
确实,QMediaPlayer::setMedia
is 异步因此,如果您在其之后调用持续时间,则媒体尚未设置,然后持续时间将是错误的。
From setMedia 上的 Qt 文档:
注意:该函数在录制指定的媒体源后立即返回。它不会等待媒体完成加载,也不检查错误。
当持续时间更新时,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 的新持续时间.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)