2016-05-27 5 views
3

私は、QObjectが破壊されると、そのすべての子を破壊することも知っています。しかし、私の最近のQtコードでは、Qtのメモリ管理がまったく役に立たないようにするポインタメンバーではなく、直接メンバーとしてすべてのクラスのメンバー(たとえば、QMainWindow)を宣言してきました。メモリ管理のほかに、QObjectの親は何のために使われていますか?

したがって、この子育てプロパティーは、QObjectsが他の用途に使用されていますか? ドキュメントから、QBoxLayout::addWidget()がウィジェットの所有権を取るかどうかはわかりません(私はそうではないと思います)。(ウィジェットをレイアウトに追加すると、their parent will be set to the parent of the layoutとしてthugaと表示されます)。

+3

あなたはレイアウトにウィジェットを追加すると、[自分の親がレイアウトの親に設定されます](http://doc.qt.io/qt-5/layout.html#tips- for-using-layouts)(レイアウトを含むウィジェット)。 – thuga

+3

破壊の理由に加えて、親を設定する良い理由の1つは、オブジェクトを新しいスレッドに移動するときです。オブジェクトを新しいスレッドに移動すると、すべての子が新しいスレッドに移動します。 – thuga

+0

あなたの慣用でないQtクラスの使用。 Qtクラスをドキュメントとして提案することを提案します。 – gomons

答えて

3

心に来る他の用途があります。

  • moveToThread()を使用した場合、全体のオブジェクトツリーを移動します、だけではなく、プッシュされたオブジェクトが(そうでない場合は、メモリ管理が不可能になるが)。
  • QWidgetは、例えば、新たなセマンティクスを持つ親/子関係を拡張:
    • 子供の座標は親ウィジェットに関連しています。
    • 親ウィジェットは、その子をそれ自身のジオメトリにクリップします。
    • 兄弟ウィジェットの順序は、そのzオーダー(スタッキング)を決定します。
    • 未処理のマウス/キーボードイベントが階層内に伝播します。
    • トップレベルのウィジェットの親は、トップレベルの共有を同じタスクバーのエントリにし、親の上の中央に表示されます(典型的な場合:ダイアログ)。
+0

つまり、ドキュメント内のクラスの説明を読むことは本当に役に立ちます:) RTFMB – dtech

関連する問題