暂停播放时,QMediaPlayer崩溃

时间:2016-10-20 11:09:37

标签: c++ qt qmediaplayer

我有一个更长的wav文件,我想要播放较小的部分。 我将startTime和endTime存储为qint64,并且已经加载了audiofile:

player = new QMediaPlayer;
connect(player, SIGNAL(positionChanged(qint64)), this, SLOT(slotTick(qint64)));

player->setNotifyInterval(10);
player->setMedia(QUrl::fromLocalFile(mediasource));
...
player->setPosition(startTime);
player->play();

我用positionChanged Signal观察位置并使用下面的插槽,一旦达到所需部分的结尾就停止播放:

void PlayerWidget::slotTick(qint64 time){
if(endTime >= 0 && time >= endTime){
    if(player->state() == QMediaPlayer::PlayingState){
        player->stop();
    }
}

不幸的是,该程序在玩家停止后不久就崩溃了。可能是什么原因

1 个答案:

答案 0 :(得分:0)

刚刚遇到同样的问题,虽然我不知道根本原因,但我设法以某种方式直观地找到了真正有用的解决方案。

不是直接调用player->stop(),而是使用singleShot QTimer触发它。相当于Python代码:QtCore.QTimer.singleShot(0, player.stop)