首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QMediaPlayer工期()总是返回0

QMediaPlayer工期()总是返回0
EN

Stack Overflow用户
提问于 2017-04-01 12:32:15
回答 1查看 3.4K关注 0票数 3

我使用QT5.7,我正在写音乐播放器,有一个问题。方法duration() of QMediaPlayer总是返回0。我怎么才能修好它?

代码示例:

代码语言:javascript
复制
QMediaPlayer *player = new QMediaPlayer;
player->setMedia(QMediaContent(QUrl(path)));
qDebug() << player->duration(); // returns 0
player->play(); // it works
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-01 12:50:54

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

实际上,QMediaPlayer::setMedia异步,所以如果在它之后调用持续时间,媒体还不会被设置,那么持续时间将是错误的。

来自关于setMedia的Qt文档

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

更新持续时间后,QMediaPlayer发送名为durationChanged(qint64 duration)的信号。所以你需要做的就是把这个信号和一个路灯或插槽连接起来。

例如,

代码语言:javascript
复制
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的新持续时间。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43156906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档