Qt:解决player->duration()第一次获取媒体时长为0的问题

前言

最近想做一个白噪声播放器,中间就用到了QMediaplayer这个类,其中遇到两个问题,一个是未初始化好就调用player->state()导致程序异常崩溃的问题(这个问题留到下一个文章去说);还有一个就是调用player->duration()第一次获取媒体时长为0的问题。

正文

这里我就不演示获取的值为0的代码了,就说下原因,这是因为我们通常设置完媒体后,即

cpp 复制代码
player->setMedia(QUrl::fromLocalFile(path));

媒体资源虽然能正常播放,但是媒体资源并未完全加载完成,所以我们获取不到此时媒体的时长。

解决办法

通过QMediaPlayer::durationChanged信号,构建一个信号和槽,当媒体时间变化的时候我们第一时间去获取这个时间,具体操作如下

cpp 复制代码
connect(player,&QMediaPlayer::durationChanged,[this](int duration) {
        int temp = player->duration();
        if (temp != 0) {
            // 将毫秒转化成秒 
            currentMusicAllTime = temp / 1000;
            // 你的代码
            ......
        }
    });

小结

如果能解决请不要吝啬你的赞,你的赞将是我持续更新的动力!!!

相关推荐
媒介易媒体发布8 分钟前
专业的汽车媒体发稿怎么选
媒体
勤奋菲菲32 分钟前
Vue3+Three.js:requestAnimationFrame的详细介绍
开发语言·javascript·three.js·前端可视化
要天天开心啊1 小时前
Java序列化和反序列化
java·开发语言
二宝1521 小时前
黑马商城day1-MyBatis-Plus
java·开发语言·mybatis
AI+程序员在路上1 小时前
QT6中Combo Box与Combo BoxFont 功能及用法
c++·qt
Porunarufu1 小时前
JAVA·类和对象③封装及包
java·开发语言
煜3642 小时前
C++异常与智能指针
开发语言·c++
wydaicls2 小时前
AIDL 接口的定义与生成,使用
java·开发语言
云草桑2 小时前
C#入坑JAVA 使用XXLJob
java·开发语言·c#
shx66662 小时前
python杂记
开发语言·python