前言
最近想做一个白噪声播放器,中间就用到了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;
// 你的代码
......
}
});
小结
如果能解决请不要吝啬你的赞,你的赞将是我持续更新的动力!!!