我使用 Qt 5.7
我正在编写音乐播放器,遇到一个问题。 duration()
的方法 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
是 异步 所以如果你在它之后调用持续时间,媒体还没有设置,那么持续时间就会错误。
来自 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 的新持续时间。
关于c++ - QMediaPlayer duration() 总是返回 0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43156906/