一杯清酒邀明月
天下本无事,庸人扰之而烦耳。

QT关于QMediaplayer 的duration()获取的音视频时间长度为0的问题。
  在QT中,使用QMediaplayer类可以很方便地实现视频的播放,而在QMediaplayer类中有个duration函数可以直接获取所打开视频的总时间长度。但使用后你会发现duration()返回的居然是个0。
  认真看过帮助文档你就会发现其实帮助文档已经说明了这个问题的解决方法:
The value may change across the life time of the QMediaPlayer object and may not be available when initial playback begins, connect to the durationChanged() signal to receive status notifications.
在初始回放开始时可能不可用,请连接durationChanged()信号以接收状态通知。
即我们只需要写个槽函数,在槽函数里面调用duration()就可以接收到正确的时间
例:

 1 //第一步:连接槽函数,信号为QMediaPlayer自带的durationChanged,槽就是自己定义的getduration,注意参数类型要一致
 2 QObject::connect(player,
 3                   SIGNAL(durationChanged(qint64)),
 4                   this,
 5                   SLOT(getduration(qint64)));
 6 
 7 //第二步:写槽函数,mediaplay为类名,不同类需要修改这个类名,playtime为总时长
 8 void mediaplay::getduration(qint64 playtime)
 9 {
10     playtime = player->duration();
11 }

经过以上两步就可以获得正确的时间啦。

以下再附上把获得的时间转化为时分秒的函数,希望对你有用

 1 void settime(qint64 playtime)
 2 {
 3     int h,m,s;
 4     playtime /= 1000;  //获得的时间是以毫秒为单位的
 5     h = playtime/3600;
 6     m = (playtime-h*3600)/60;
 7     s = playtime-h*3600-m*60;
 8     ui->label_time->setText(QString("%1:%2:%3").arg(h).arg(m).arg(s));  //把int型转化为string类型后再设置为label的text
 9     ui->label_time->setStyleSheet("color:white");  //设置字体颜色为白色
10 }

 

posted on 2021-04-14 14:09  一杯清酒邀明月  阅读(1748)  评论(0编辑  收藏  举报