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

小结

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

相关推荐
小羊先生car9 分钟前
RTOS-F429-HAL-(动/静态)任务的创建(2026/7/27)
开发语言·算法·c#
LONGZETECH38 分钟前
新能源汽车动力系统仿真硬核拆解:五系统分层架构的设计逻辑与技术权衡
c语言·开发语言·架构·汽车·汽车仿真教学软件·汽车教学软件
醉城夜风~1 小时前
C++模板详解:从基础到高级全面解析
java·开发语言·c++
地球驾驶员1 小时前
NX二次开发C#-获取体的外表面
开发语言·c#
誰能久伴不乏1 小时前
深入理解 C++ 多态:对象模型与底层机制解析
开发语言·c++·架构
Wang's Blog1 小时前
Go-Zero项目开发30: 微服务配置中心的设计与实现
开发语言·微服务·golang·go-zero
HH‘HH2 小时前
前端应用的离线暂停更新策略:原理、实现与最佳实践
开发语言·前端·php
我命由我123452 小时前
Android 在构建过程中,发现有两个依赖库都包含了相同路径的资源文件
android·java·开发语言·java-ee·kotlin·android-studio·android runtime
蜡台2 小时前
JS 浏览器 / App WebView 检测工具
开发语言·javascript·ecmascript
程序喵大人2 小时前
【C++进阶】STL容器与迭代器 - 04 list 和 forward_list 用节点换稳定位置
开发语言·c++·list