21

ほとんどすべての QtWidgets クラスは親を持つことができます。通常、オブジェクトの初期化時に親を設定することはオプションです。たとえば、クラスを継承するクラスを作成する場合QWidget、コンストラクターで次のことを行います。

Widget::Widget(QWidget* parent): QWidget(parent) {
    hbox = new QHBoxLayout(this);
    yes_button = new QPushButton("&Yes");
    no_button = new QPushButton("&No", this);
    cancel_button = new QPushButton("&Cancel", hbox);
}

親を設定することも設定しないこともできます。cancel_buttonの子に設定できhboxます。私もcancel_buttonの子供に設定できますyes_buttonが、それは悪いことだと思います。

これのポイントは何ですか?QWidgetまた、作成するすべてのベース クラスの親を設定する必要は本当にありますか?

4

2 に答える 2

28

GUI オブジェクトの描画順序を支援するだけでなく、メモリ管理にも役立つため、QObject を破棄すると、そのすべての子も破棄されます。詳細については、 http://doc.qt.io/qt-4.8/objecttrees.htmlを参照してください。親で何かが変更された場合 (サイズが変更された場合など)、親は自分自身も更新するように子に通知できます。

あなたの質問に答えるために、すべての親を設定する必要はありません (そのため、結局のところオプションのパラメーターです) が、ほとんどの場合、正しく設定する方が適切です。

于 2015-05-20T15:37:10.840 に答える