QMediaPlayer::position() 返回零
Posted
技术标签:
【中文标题】QMediaPlayer::position() 返回零【英文标题】:QMediaPlayer::position() return zero 【发布时间】:2020-07-24 11:19:46 【问题描述】:我试图像这样获得当前媒体的位置:
player->setNotifyInterval(500);
connect(Player::player, &QMediaPlayer::positionChanged, this, &Player::ChangedPosition);
void Player::ChangedPosition(qint64 position)
Player::currentPosition = position; //qint64 variable
//currentPosition still 0
qDebug() << "current position: " << currentPosition;
return;
我试图这样做(因为 Qt 的文档 没有说这个插槽 QMediaPlayer::setPosition
)
connect(Player::player, &QMediaPlayer::positionChanged, this, &QMediaPlayer::setPosition);
我有两个班级(Playlist
和 Player
):
playlistmanager
- Playlist
类的对象
playermanager
- Player
类的对象
设置播放列表并播放:
//set current media
playlistmanager->GetCurrentPlayList()->setCurrentIndex(newIndex);
//play this media
playermanager->play();
//set current position
playermanager->SetPositionOfTrack(playermanager->GetPositionOfTrack());
在这段代码媒体播放之后,但从头开始
这里Player
类的两个方法:
qint64 Player::GetPositionOfTrack()
return currentPosition; //qint64 variable in class
void Player::SetPositionOfTrack(const qint64 position)
player->setPosition(position);
return;
那么,我怎样才能获得当前媒体的当前位置?
【问题讨论】:
你能展示最小的例子来重现和源代码吗? 您是否启动了播放器(例如通过play())? @Scheff 当然。添加代码。 尝试用playermanager->SetPositionOfTrack(qint64(1000))
替换playermanager->SetPositionOfTrack(playermanager->GetPositionOfTrack())
??在我看来,您正在将轨道的位置设置为自身
@gui3 你是对的。我正在保存媒体的位置并再次设置它。我需要它,但currentPosition = 0
。我该如何解决?
【参考方案1】:
如果我创建这样的对象,需要使用this
指针:player = new QMediaPlayer(this);
。错误示例:
connect(Player::player, &QMediaPlayer::positionChanged, this, &QMediaPlayer::setPosition);
正确类的构造函数:
Player::Player()
try
player = new QMediaPlayer(this);
catch(std::bad_alloc &exp)
#ifndef Q_DEBUG
qCritical() << "Exception caught: " << exp.std::bad_alloc::what();
#endif
abort();
catch(...)
#ifndef Q_DEBUG
qCritical() << "Some exception caught";
#endif
abort();
player->setNotifyInterval(500);
connect(this, &QMediaPlayer::positionChanged, this, &Player::ChangedPosition);
return;
【讨论】:
以上是关于QMediaPlayer::position() 返回零的主要内容,如果未能解决你的问题,请参考以下文章