如题,其position就是准确的position,这里我给出测试代码:(大概原理就是有两个timer,一个timer会让QMediaPlayer在某个时候pause(),并在pause()之后输出一个pause完毕的瞬间获取的position;另一个timer则高频率获取QMediaPlayer的position(),这样子对比pause完毕的瞬间输出的position和后续高频率timer输出的position就可以知道pause()后的position还有没有变化,如果没有变化那么pause()后瞬间获取的position就是准确的)
QMediaPlayer *player = new QMediaPlayer;
QAudioOutput *audioOutput = new QAudioOutput;
audioOutput->setVolume(0.5);
player->setAudioOutput(audioOutput);
player->setSource(QUrl::fromLocalFile("C:/Users/me/Music/1.flac"));
QTimer *timer_10s = new QTimer;
timer_10s->setSingleShot(true);
timer_10s->setTimerType(Qt::PreciseTimer);
timer_10s->setInterval(16350);
QTimer *timer_1ms = new QTimer;
timer_1ms->setSingleShot(false);
timer_1ms->setTimerType(Qt::PreciseTimer);
timer_1ms->setInterval(1);
QObject::connect(timer_10s, &QTimer::timeout, [=](){
player->pause();
qDebug() << "paused pos:" << player->position();
});
QObject::connect(timer_1ms, &QTimer::timeout, [=](){
qDebug() << "pos:" << player->position();
// if(!player->isPlaying())
// timer_1ms->stop();
});
player->play();
timer_10s->start();
timer_1ms->start();
注意包含一下头文件:
#include <QMediaPlayer>
#include <QAudioOutput>
#include <QDebug>
#include <QTimer>
输出如下
pos: 16213
pos: 16213
pos: 16213
paused pos: 16213
pos: 16213
pos: 16213
pos: 16213
pos: 16213
所以pause()过后获取的position是精确的