簡體   English   中英

QObject派生類型需要父QObject嗎?

[英]Do QObject derived types need a parent QObject?

我正在編寫一些從QObject派生的Qt類,它看起來像:

class A : public QObject
{
    Q_OBJECT
public: A() : QObject() {}
.....
}

但在我看到的幾個地方,QObject派生類都有一個父類,如:

class A : public QObject
{
    Q_OBJECT
public: A(QObject* parent = 0) : QObject(parent) {}
.....
}

所以問題是:我是否需要父母? 如果我有一個,如果我有一個默認的(0)或者根本沒有,那有什么區別?

因此,您不需要父母。

但設置父級在垃圾收集方面具有一些優勢。

如果您設置了父項,那么當父項被刪除時,它也將刪除其所有子項。

以下摘自文檔

QObjects在對象樹中組織自己。 當您使用另一個對象作為父對象創建QObject時,該對象將自動將其自身添加到父對象的children()列表中。 父母取得對象的所有權; 即,它將自動刪除其析構函數中的子項。 您可以按名稱查找對象,也可以使用findChild()或findChildren()鍵入。

您應該允許設置父級
如果要允許將包含class A成員的對象移動到另一個線程。
(你真的無法阻止。)
在這種情況下,成員A也可能必須移動。

來自文檔

在更改線程關聯之前,將QEvent :: ThreadChange事件發送到此對象。 您可以處理此事件以執行任何特殊處理。 請注意,發布到此對象的任何新事件都將在targetThread中處理。

因此,如果您不允許傳遞父對象,則包含您的類的對象的維護者必須覆蓋event() ,檢查QEvent::ThreadChange並手動移動A.

來自文檔

在更改線程關聯之前,將QEvent :: ThreadChange事件發送到此對象。 您可以處理此事件以執行任何特殊處理。 請注意,發布到此對象的任何新事件都將在targetThread中處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM