如何自动销毁QMediaPlayer?

时间:2017-02-12 22:01:58

标签: qt

我使用Qt文档中的这段代码在我的应用程序中播放音频文件(通知等):

QMediaPlayer *player = new QMediaPlayer();
player->setMedia(QUrl("qrc:/huggle/sounds/" + file));
player->setVolume(100);
player->play();

然而,在我这看来它会泄漏,因为媒体播放器没有析构函数。

有没有办法在以非阻塞方式播放后删除它?可能挂钩一些事件会起作用,但不清楚哪个。

1 个答案:

答案 0 :(得分:0)

您可以简单地使用信号QMediaPlayer::mediaStatusChanged(QMediaPlayer::MediaStatus status),状态为QMediaPlayer::EndOfMedia我猜!?

或者只需将指针保存到班级QMediaPlayer以供日后使用。

connect(player, SIGNAL(mediaStatusChanged(QMediaPlayer::MediaStatus)), SLOT(player_mediaStatusChanged(QMediaPlayer::MediaStatus)));


// slot
void YourClass::player_mediaStatusChanged(QMediaPlayer::MediaStatus status)
{
    if (status == QMediaPlayer::EndOfMedia)
        sender()->deleteLater(); // will schedule the deletion of your QMediaPlayer (sender of this signal)
}