Qt のウィジェットは、特にそれらを組み合わせるときに、階層を定義します。これを(単純化された)例で視覚的に見てみましょう。
私のアプリケーションには、中央の QWidget があります。その上に、他の 2 つのウィジェットがあります。一部の 3D レンダリング用の QGLWidget とコントロール用の QTabWidget。これら 2 つのウィジェットは、私の中心的な QWidget の子です。
QTabWidget には、QWidget 自体であるタブがあります。そして、それらを QTabWidget の子にするのは理にかなっているように思えますよね?
そして、私は続けることができます。おそらく、タブの 1 つにはいくつかのボタンがあり、別のタブにはいくつかのテキストフィールドがあります。
ここで行っているのは、QWidget の階層を作成することです。したがって、この例の場合、次のようになります。
QWidget (the Central Widget)
|
|-QGLWidget (my rendering window)
|-QTabWiget (the tab widget for my controls)
|
|-QWidget (the first tab)
||
||-QPushButton (a button on the first tab)
|
|-QWidget (the second tab)
|
|-QLineEdit (a widget to provide some input)
とにかく、あなたは私のドリフトをキャッチします。コードに戻ると、QWidget (または任意の派生ウィジェット) のコンストラクターを介してこの階層を定義できます。QGLWidget を作成する場合、そのコンストラクターで、中心となる QWidget を親としてポインターを提供します。
この階層にはいくつかの理由があります。作成/削除について言及しています。しかし、タブを切り替える場合も想像してみてください。タブの上に表示する必要がある要素はどれですか? もちろんその子供たち。また、Qt を使い始めると、レイアウトについて学ぶことができます。レイアウトをウィジェットに設定すると、そのウィジェットのすべての子に影響します。他にもいくつかの理由 (および舞台裏で進行中のこと) がありますが、今のところはこれで十分です。
私の説明はかなり概念的なものです。おそらく、これは技術的に最も詳細で正しい説明ではありませんが、いくつかの指針を与えるはずです。
コード例に戻ります。AddressBook は QWidget から派生します。GUI に配置する場合は、別のウィジェットの上に配置することをお勧めします。その子として。したがって、この AddressBook を追加すると、その親が何であるかを知ることができます。この例では使用されていません。AddressBook 自体が最上位のウィジェットです。しかし、それは同じように簡単に階層の一部になる可能性があります。
かなりの量のテキストですが、概念がある程度説明されていることを願っています。Qt に付属するサンプルの一部をご覧ください。物事がどのように構成されているかを理解する必要があります。接続方法がわからない場合は、上で行ったように図を描いてください。それはあなたにとって意味のあるものになるはずです。誰かが修正や有用な技術的洞察を持っている場合は、遠慮なくコメントするか、私を修正してください。
それが役立つことを願っています。