私の質問は次のとおりです。QTableWidget
+ a QMenuBar
(の特定の構成で)である新しいウィジェットを作成したいと思いますQTableWidget
。現在、 +aから派生しQWidget
て含むMyWidgetを作成しました。しかし、とから派生することによって同じことを行うことは可能ですか?そして、可能であれば、コンストラクターはどのように見えるでしょうか?QTableWidget
QMenuBar
MyWidget
QTableWidget
QMenuBar
4 に答える
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ソースコードで非常に一般的に発生し、私はそれをはるかにクリーンだと考えています。
これは、作曲があなたのニーズに合うように聞こえます。
継承はis-a
関係を満たします(NewWidgetはQTableWidgetであり、NewWidgetはQMenuBarですか?)
構成はhas-a
関係を満たします(NewWidgetにはQTableWidgetがあり、NewWidgetにはQMenuBarがありますか?)
2つのQWidgetから同時に継承することはできません。各QWidgetはQObjectでもあります。MOC(メタオブジェクトコンパイラ)はそのようなクラスを処理できません。
継承-関係はXisaY
構成-関係はXがYを持っている
あなたの答えがあります-XとYの関係は何ですか?