我使用Qt文档中的这段代码在我的应用程序中播放音频文件(通知等):
QMediaPlayer *player = new QMediaPlayer();
player->setMedia(QUrl("qrc:/huggle/sounds/" + file));
player->setVolume(100);
player->play();
然而,在我这看来它会泄漏,因为媒体播放器没有析构函数。
有没有办法在以非阻塞方式播放后删除它?可能挂钩一些事件会起作用,但不清楚哪个。
答案 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)
}