Qt信号和槽对象断开连接?

26

我想知道在销毁发射信号的对象时,是否需要断开连接的信号和槽。这里有个例子:

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)));

这样做是否会自动断开与旧音频输出的信号连接,还是会导致内存泄漏或其他未定义的行为?

先行感谢。


虽然 QObject 在销毁时会安全地清理连接,但我建议不要删除已经设置了父对象的 QObject,就像您上面所做的那样,因为这将短路已经存在于 QObject 中的自动机制。直接删除 QObject 通常也不太安全,最好使用 deleteLater() 方法。 - Arnold Spence
2个回答

40
当您调用QObject析构函数时,信号会自动断开连接。 请查看Qt文档:QObject析构函数

4

您不必手动disconnect()信号和槽,QObject的销毁会自动清理它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接