2

QWidgetから継承する独自のクラスMyWidgetを作成したい場合

チュートリアルでは、このようなコンストラクターを作成するように指示されています...

MyWidget::MyWidget(QWidget *parent)
: QWidget(parent){....}

QWidget(parent)の役割は何だろうか

QWidgetのコンストラクターを明示的に呼び出すことを意味しますか?

4

4 に答える 4

5

はい。C ++では、コンストラクターの初期化リストで基本クラスのコンストラクターを明示的に呼び出す必要がある場合、それを実行する必要があります。この場合、QWidget(parent)コンストラクターでコードを実行する前に実行されます。ちなみに、これは単なるQtのことではなく、C++の継承では一般的です。

于 2010-05-12T14:04:32.360 に答える
2

前の回答に加えて:

1 前述のように、parent が null でない場合、ウィジェットは親ウィジェットのすぐ内側にレンダリングされます。

2 親ウィジェットが削除された場合、すべての子ウィジェットも削除演算子によって削除されます。

デフォルトのウィジェット コンストラクターの正しい実装は次のとおりです。

class MyWidget: public QWidget {
    Q_OBJECT
    public:
        explicit MyWidget(QWidget *parent = 0);
}

MyWidget::MyWidget(QWidget *parent = 0): QWidget(parent) {
    // Your own initialization code
}

スタック ウィジェットにゼロ以外の親を指定しないようにしてください。ネストされたウィジェットを常に次のように作成することをお勧めします。

QWidget *parentWidget;
MyWidget myWidget = new MyWidget(parentWidget);

ここで詳細を読むことができます: http://doc.trolltech.com/4.6/objecttrees.html

于 2010-05-12T14:11:47.593 に答える
0

これは C++ では初期化リストと呼ばれ、はい、QWidget のコンストラクターへの明示的な呼び出しです。デフォルトでは、初期化リストに明示的な呼び出しがない限り、C++ は基本クラスのコンストラクターの引数なしバージョンを呼び出します。クラスのメンバーの初期化がそのクラスのコンストラクターによって処理されることは、一般に優れた設計と見なされます。Qt はこの規則に従います。したがって、ここでは基本クラスのコンストラクターにポインターを渡しているため、メンバー変数の 1 つに格納できます。

于 2011-09-17T13:18:11.687 に答える
0

「あなたの」 Qt チュートリアルから:このクラスは QWidget を継承しているため、新しいクラスはウィジェットであり、トップレベル ウィンドウまたは子ウィジェット (前の章の QPushButton など) である可能性があります

幸運を!

于 2010-05-12T13:59:46.960 に答える