我使用QT5.7,我正在写音乐播放器,有一个问题。方法duration() of QMediaPlayer总是返回0。我怎么才能修好它?
代码示例:
QMediaPlayer *player = new QMediaPlayer;
player->setMedia(QMediaContent(QUrl(path)));
qDebug() << player->duration(); // returns 0
player->play(); // it works发布于 2017-04-01 12:50:54
您不能在player->duration()之后立即执行player->setMedia(QMediaContent(QUrl(path)));。
实际上,QMediaPlayer::setMedia是异步,所以如果在它之后调用持续时间,媒体还不会被设置,那么持续时间将是错误的。
注意:此函数在记录指定的媒体源后立即返回。它不会等待媒体完成加载,也不会检查错误。
更新持续时间后,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的新持续时间。
https://stackoverflow.com/questions/43156906
复制相似问题