【问题标题】:Qt Signals and Slots object disconnect?Qt Signals and Slots 对象断开连接?
【发布时间】:2012-03-05 02:30:33
【问题描述】:

我想知道如果我破坏信号发射对象是否需要断开信号和插槽。这是一个例子:

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

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

提前谢谢你。

【问题讨论】:

  • 虽然QObjects 在连接被破坏时安全地清理连接,但我建议不要删除已经像上面那样设置其父级的QObject,因为这会使自动机制短路为QObjects 准备好了。通常使用deleteLater() 也比直接删除QObject 更安全。

标签: qt signals-slots


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-12-14
      • 2014-08-17
      • 2012-07-25
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 2017-11-26
      • 2011-04-01
      • 1970-01-01
      相关资源
      最近更新 更多