2015-10-26 19 views
5

在早期的Qt 5版本中,我必須斷開信號的lambdas,如下所示:「Disconnecting lambda functions in Qt5」。我是否還需要斷開Qt5.5中的信號的lambda?

Here我發現下面的語句: 有當「接收器」被破壞,因爲它是沒有的QObject仿函數沒有自動斷線。但是,從5.2開始,會有一個過載添加一個「上下文對象」。當該對象被銷燬時,連接被中斷(上下文也被用於線程關聯:lambda將在用作上下文的對象的事件循環的線程中被調用)。

  • 這是否意味着我不再需要斷開與Qt5.2或更高版本的lambdas?
  • 我必須通過該環境還是自動完成?

回答

6

當Qt通過QObject::~QObject()銷燬時,Qt會自動刪除與物體的所有連接。所以如果你創建一個到lambda的連接,當發送對象被刪除時,連接會被自動清除。您不需要,也不需要自己斷開連接。

當您需要對連接的生存期進行更細粒度的控制時,將使用您所指的上下文對象。當您想要在另一個對象被銷燬時(上下文對象)刪除連接時,會使用它。這使得在發送者銷燬之前如果需要刪除連接更容易。

總結:您不需要手動斷開lambdas,它們會自動清理。在發送者對象被銷燬之前,您可以使用上下文對象來刪除連接。

+0

上下文對象需要是QObject,不是嗎?它不適用於普通的C++對象,只是爲了再次確認。 –

+0

是的,上下文對象必須是QObject。 – ajshort

相關問題