当删除其中一个类时,Qt中的信号是否自动断开

dai*_*isy 44 qt destructor qt-signals

当其中一个边被删除时,Qt会自动删除对象之间的连接吗?

例如connect (A .. , B ..),当删除A(指针)或删除B时,是否会断开连接?

是否有必要在析构函数中明确使用disconnect?

Mat*_*Mat 41

是的,QObject::~QObject析构函数负责:

进出对象的所有信号都将自动断开,并且从事件队列中删除该对象的所有待处理发布事件.
但是,使用deleteLater()而不是直接删除QObject子类通常更安全.

请注意:

警告:等待传递挂起事件时删除QObject可能会导致崩溃.如果QObject存在于与当前正在执行的不同的线程中,则不能直接删除它.改为使用deleteLater(),这将导致事件循环在所有挂起事件传递给它之后删除该对象.

  • 在删除的对象中也要小心lambdas(如果你使用任何):它们没有断开连接......猜猜我怎么知道;) (4认同)
  • @mBardos从Qt 5.2开始,存在一个使用上下文对象的重载。删除上下文对象后,与lambda的连接将断开。 (2认同)