我使用Qt文档中的这段代码在我的应用程序中播放音频文件(通知等):
QMediaPlayer *player = new QMediaPlayer();
player->setMedia(QUrl("qrc:/huggle/sounds/" + file));
player->setVolume(100);
player->play();然而,在我看来,它将会泄漏,因为没有媒体播放器的析构函数。
有没有办法在它以非阻塞方式结束播放后将其删除?挂起一些事件可能会起作用,但还不清楚是哪一个。
发布于 2017-02-13 15:45:15
我想您可以简单地使用状态为QMediaPlayer::EndOfMedia的信号QMediaPlayer::mediaStatusChanged(QMediaPlayer::MediaStatus status)!?
或者只是将指向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)
}https://stackoverflow.com/questions/42193796
复制相似问题