我使用此代码段从Qt文档在我的应用程序中播放的音频文件(通知等):如何自动销毁QMediaPlayer?
QMediaPlayer *player = new QMediaPlayer();
player->setMedia(QUrl("qrc:/huggle/sounds/" + file));
player->setVolume(100);
player->play();
然而,这在我看来就像它会泄漏,因为有媒体播放器没有析构函数。
有没有办法在它以非阻塞方式完成播放后将其删除?可能挂钩一些事件可行,但目前还不清楚。
为什么要在堆上创建它呢? – MrEricSir
@MrEricSir因为它在一个函数中,如果我在堆栈中定义它,它会在开始播放声音之前立即销毁。 play()是异步函数并立即返回,因此该对象在退出创建它的函数时会被销毁。 – Petr
这没什么意义 - 在它所在的类中实例化它,或者如果必须的话,甚至在全局范围内实例化它。这看起来像是一个更大的问题,在C++中误解了对象生命周期而不是QMediaPlayer的任何特定事件。 – MrEricSir