[英]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.