我使用此代碼段從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