[英]QMediaPlayer::position() return zero
我試圖讓當前媒體的 position 像這樣:
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);
我有兩個 class ( Playlist
和Player
):
playlistmanager
管理器 - 播放列表 class 的Playlist
playermanager
- Player
class 的 object
設置播放列表並播放:
//set current media
playlistmanager->GetCurrentPlayList()->setCurrentIndex(newIndex);
//play this media
playermanager->play();
//set current position
playermanager->SetPositionOfTrack(playermanager->GetPositionOfTrack());
在此代碼媒體播放后,但從頭開始
這里Player
class的兩種方法:
qint64 Player::GetPositionOfTrack()
{
return currentPosition; //qint64 variable in class
}
void Player::SetPositionOfTrack(const qint64 position)
{
player->setPosition(position);
return;
}
那么,如何獲得當前媒體的當前 position ?
如果我像這樣創建 object 需要使用this
指針: player = new QMediaPlayer(this);
. 錯誤的例子:
connect(Player::player, &QMediaPlayer::positionChanged, this, &QMediaPlayer::setPosition);
正確的 class 的構造函數:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.