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

小结

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

相关推荐
喵星人工作室1 天前
C++火影忍者1.1.2
开发语言·c++
basketball6161 天前
C++ 中的 ptrdiff_t 详解
开发语言·c++
月亮邮递员6161 天前
Markdown语法总结
开发语言·前端·javascript
printfLILEI1 天前
php中的类与对象以及反序列化
linux·开发语言·php
曹牧1 天前
C#:主线程能够捕获到子线程中的异常
开发语言·数据库·c#
代码中介商1 天前
深入解析STL中的stack、queue与priority_queue
开发语言·c++
彦为君1 天前
JavaSE-07-异常机制
java·开发语言·后端·python·spring
OxyTheCrack1 天前
【Golang】简述make与new内置函数以及两者的区别
开发语言·golang
Rain5091 天前
mini-cc 的 MCP 协议:给 AI 装个 USB-C 接口
c语言·开发语言·前端·人工智能·架构·node.js·ai编程
华科大胡子1 天前
AI开发者的网络卡点:Anthropic连接超时
开发语言·php