8

から派生した Qt クラスを作成しQObjectています。次のようになります。

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

しかし、私が見たいくつかの場所では、QObject 派生クラスはすべて次のような親を持っています。

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

問題は、親が必要かどうかです。持っている場合、デフォルトのもの (0) を持っている場合、またはまったく持っていない場合の違いは何ですか?

4

2 に答える 2

9

ですから、親は必要ありません。

ただし、親を設定すると、ガベージ コレクションの点でいくつかの利点があります。

親を設定すると、親が削除されると、そのすべての子も削除されます。

次のドキュメントからの抜粋:

QObject は、オブジェクト ツリーで構成されます。別のオブジェクトを親として QObject を作成すると、オブジェクトは親の children() リストに自動的に追加されます。親はオブジェクトの所有権を取得します。つまり、デストラクタで子を自動的に削除します。名前でオブジェクトを検索し、必要に応じて findChild() または findChildren() を使用して入力できます。

于 2013-05-28T06:13:12.590 に答える