【问题标题】:QT: Should I disconnect slot manually? If yes, how can I disconnect a specific slot?QT:我应该手动断开插槽吗?如果是,如何断开特定插槽?
【发布时间】:2018-05-21 01:36:03
【问题描述】:

我在B类中有一个插槽,将连接到A类中的信号,但是B类会被不断解构,所以在B类解构过程中,我应该断开插槽还是会被QT断开?如果我应该手动断开连接,我该怎么做?

【问题讨论】:

标签: c++ qt signals slots


【解决方案1】:

您可以捕捉信号void QObject::destroyed(QObject * obj = 0) 进行清理:

此信号在对象obj 之前立即发出 被破坏,无法被阻挡。

所有对象的孩子在这个信号之后立即被销毁 被发射。

回答:

我应该断开插槽还是被 QT 断开?如果我 应该手动断开连接,怎么办?

当涉及的任何一个对象被破坏时,信号槽连接将被移除。

【讨论】:

    【解决方案2】:

    Qt 负责断开连接。你不必担心它。

    但建议使用

    obj->deleteLater();

    方法而不是

    delete obj;

    Same Question Exists

    【讨论】:

      【解决方案3】:

      如果您不使用线程,您可以断开另一个类插槽,如下面的代码: 您将在 A 类的构造函数内调用,而不是在构造函数之外调用

      bttnShutdown = new QPushButton(this);
      bttnShutdown->setGeometry(290, 2, 25, 26);
      myWorker =new B;
      connect(bttnShutdown, SIGNAL(clicked()), myWorker, SLOT(dowork()));
      

      【讨论】:

      • 这与问题有什么关系?问题中没有提到线程。
      猜你喜欢
      • 2019-02-12
      • 1970-01-01
      • 2015-04-15
      • 2014-02-18
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多