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

小结

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

相关推荐
国服第二切图仔16 小时前
Rust开发实战之简单游戏开发(piston游戏引擎)
开发语言·rust·游戏引擎
ii_best17 小时前
安卓/IOS工具开发基础教程:按键精灵一个简单的文字识别游戏验证
android·开发语言·游戏·ios·编辑器
草莓熊Lotso17 小时前
C++ 继承特殊场景解析:友元、静态成员与菱形继承的底层逻辑
服务器·开发语言·c++·人工智能·经验分享·笔记·1024程序员节
诗句藏于尽头17 小时前
电脑使用软件控制本机屏和外接屏失效问题及解决
开发语言
不是株17 小时前
JavaWeb(后端进阶)
java·开发语言·后端
千里镜宵烛18 小时前
深入 Lua 环境机制:全局变量的 “容器” 与 “隔离术”
开发语言·junit·lua
QX_hao1 天前
【Go】--反射(reflect)的使用
开发语言·后端·golang
inferno1 天前
Maven基础(二)
java·开发语言·maven
我是李武涯1 天前
从`std::mutex`到`std::lock_guard`与`std::unique_lock`的演进之路
开发语言·c++
史不了1 天前
静态交叉编译rust程序
开发语言·后端·rust