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

小结

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

相关推荐
繁华似锦respect20 小时前
C++ 无锁队列(Lock-Free Queue)详细介绍
linux·开发语言·c++·windows·visual studio
专注API从业者20 小时前
Node.js/Python 调用淘宝关键词搜索 API:从接入到数据解析完整指南
开发语言·数据结构·数据库·node.js
liu****20 小时前
九.操作符详解
c语言·开发语言·数据结构·c++·算法
人得思变~谁会嫌自己帅呢?20 小时前
Java中的类加载器工作原理
java·开发语言
MediaTea20 小时前
Python 编程B17:文件(二)
开发语言·python
西游音月20 小时前
(10)功能实现:Qt实战项目之新建项目对话框
开发语言·qt
w***954921 小时前
在21世纪的我用C语言探寻世界本质——字符函数和字符串函数(2)
c语言·开发语言
ironinfo21 小时前
C#性能优化随记
开发语言·性能优化·c#
无限进步_21 小时前
基于顺序表的通讯录系统设计与实现
c语言·开发语言·数据结构·c++·后端·算法·visual studio
e***193521 小时前
QoS质量配置
开发语言·智能路由器·php