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

小结

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

相关推荐
豆豆plus10 小时前
C++实现文件操作类
开发语言·c++
j***294810 小时前
对基因列表中批量的基因进行GO和KEGG注释
开发语言·数据库·golang
寻找华年的锦瑟10 小时前
Qt-视频九宫格布局
开发语言·qt
f***R810 小时前
go测试问题记录
开发语言·后端·golang
sunshine64110 小时前
JS实现悬浮可拖拽vue组件封装
开发语言·前端·javascript
v***446710 小时前
PLC(电力载波通信)网络机制介绍
开发语言·网络·php
JienDa10 小时前
JienDa聊PHP:盲盒电商实战中主流PHP框架的协同架构方略
开发语言·架构·php
小邓   ༽10 小时前
C语言课件(非常详细)
java·c语言·开发语言·python·eclipse·c#·c语言课件
JienDa10 小时前
JienDa聊PHP:今日头条仿站实战架构深度解析
开发语言·架构·php
~~李木子~~10 小时前
中文社交媒体情感分析实战:基于B站评论的机器学习与深度学习对比
深度学习·机器学习·媒体