3

我有一个较长的 wav 文件,我想在其中播放较小的部分。我将 startTime 和 endTime 存储为 qint64 并已经加载了音频文件:

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 信号观察位置,并使用以下插槽,在达到所需部分的结尾时停止播放:

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

不幸的是,程序在播放器停止后不久就崩溃了。可能是什么原因

4

1 回答 1

1

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

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

于 2018-03-12T15:33:32.873 回答