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;
            // 你的代码
            ......
        }
    });

小结

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

相关推荐
cui_ruicheng10 分钟前
C++关联容器进阶:unordered_map / set与详解
开发语言·c++
sycmancia17 分钟前
C++——C++异常处理
开发语言·c++
xxxxxxllllllshi18 分钟前
java值传递和引用传递的区别?举例一些常见都笔试面试题说明,最后有速记口诀
java·开发语言
HLC++22 分钟前
C++中的类和对象
开发语言·c++
setmoon21423 分钟前
C++与量子计算模拟
开发语言·c++·算法
KIKIiiiiiiii27 分钟前
微信自动化机器人开发
java·开发语言·人工智能·python·微信·自动化
victory043128 分钟前
containerd打包命令 和NFS挂载
java·开发语言
野犬寒鸦29 分钟前
从零起步学习计算机操作系统:进程篇(知识扩展提升)
java·服务器·开发语言·后端·面试
※※冰馨※※30 分钟前
【QT】System error #1455: 页面文件太小,无法完成操作
开发语言·windows·qt