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

小结

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

相关推荐
橘子编程7 小时前
操作系统原理:从入门到精通全解析
java·linux·开发语言·windows·计算机网络·面试
唔667 小时前
原生 Android(Kotlin)仅串口「继承架构」完整案例二
android·开发语言·kotlin
错把套路当深情7 小时前
Kotlin 全方向开发技术栈指南
开发语言·kotlin
飞Link7 小时前
LangGraph 核心架构解析:节点 (Nodes) 与边 (Edges) 的工作机制及实战指南
java·开发语言·python·算法·架构
大神的风范7 小时前
QT部署YOLO11实时检测
驱动开发·深度学习·qt·目标检测·计算机视觉
cpp_learner8 小时前
Linux ARM架构 使用 linuxdeployqt 打包QT程序
qt
武藤一雄8 小时前
WPF中ViewModel之间的5种通讯方式
开发语言·前端·microsoft·c#·wpf
XiYang-DING8 小时前
【Java】堆
java·开发语言
Lyyaoo.8 小时前
【Java基础面经】Java 反射机制
java·开发语言·python
m0_694845578 小时前
UVdesk部署教程:企业级帮助台系统实践
服务器·开发语言·后端·golang·github