0

私の質問は次のとおりです。QTableWidget+ a QMenuBar(の特定の構成で)である新しいウィジェットを作成したいと思いますQTableWidget。現在、 +aから派生しQWidgetて含むMyWidgetを作成しました。しかし、とから派生することによって同じことを行うことは可能ですか?そして、可能であれば、コンストラクターはどのように見えるでしょうか?QTableWidgetQMenuBarMyWidgetQTableWidgetQMenuBar

4

4 に答える 4

5

QTableWidgetとQMenuBarはどちらもQWidgetから継承するため、二重継承を使用しないことを強くお勧めします。たとえば、この質問を参照してください。

あなたが現在行っていることは、少なくともQtでは、一般的に「正しい」方法と見なされます。合成の代わりに多重継承を使用したい主な理由は、ウィジェットを使用している人々がたとえばQMenuBarに追加できるようにするためだけに、一連の関数を作成する必要があると感じるかもしれないからだと思います。このような関数は次のようになります。

QAction *MyWidget::addMenuToMyQMenuBar(QMenu *menu)
{
    return myMenu->addMenu(menu);
}

私にとってこれは少しばかげているので、代わりにQMenuBarのアクセサー関数を作成することをお勧めします。

QMenuBar *MyWidget::menuBar()
{
    return myMenu;
}

今、あなたのクラスを使用している誰かがただすることができます

myWidget->menu()->addAction(someAction);

このスタイルのコーディングはQtソースコードで非常に一般的に発生し、私はそれをはるかにクリーンだと考えています。

于 2012-07-21T03:40:56.280 に答える
1

これは、作曲があなたのニーズに合うように聞こえます。

継承はis-a関係を満たします(NewWidgetはQTableWidgetであり、NewWidgetはQMenuBarですか?)
構成はhas-a関係を満たします(NewWidgetにはQTableWidgetがあり、NewWidgetにはQMenuBarがありますか?)

于 2012-07-21T03:40:29.937 に答える
1

2つのQWidgetから同時に継承することはできません。各QWidgetはQObjectでもあります。MOC(メタオブジェクトコンパイラ)はそのようなクラスを処理できません。

于 2012-07-24T21:51:47.263 に答える
0

継承-関係はXisaY

構成-関係はXがYを持っている

あなたの答えがあります-XとYの関係は何ですか?

于 2012-07-21T03:52:57.773 に答える