2012-02-13 139 views
20

我想知道如果我需要斷開信號和插槽,如果我摧毀信號發射對象。這裏有一個例子:Qt信號和插槽對象斷開?

QAudioOutput * audioOutput = new QAudioOutput(format,mainWindow); 
connect(audioOutput,SIGNAL(stateChanged(QAudio::State)),this,SLOT(stateChanged(QAudio::State))); 

delete audioOutput; 

audioOutput = new QAudioOutput(format,mainWindow); 
connect(audioOutput,SIGNAL(stateChanged(QAudio::State)),this,SLOT(stateChanged(QAudio::State))); 

這是否會自動斷開舊audioOutput的信號,還是會導致MEM泄漏或其他一些不確定的行爲?

預先感謝您。

+0

儘管'QObject'安全地清理了連接,當它們被銷燬時,我建議不要刪除已經擁有其父集的'QObject',因爲這會縮短爲'QObject'構建自動機制。使用'deleteLater()'而不是直接刪除'QObject'通常也更安全。 – 2012-02-13 17:30:23

回答

32

當您調用QObject析構函數時,信號會自動斷開連接。 查看Qt文檔:QObject Destructor

3

您不必手動斷開信號和插槽,QObject破壞會自動清除它們。