[英]Qt and C++ : double inheritance vs composition?
我的问题如下。 我想制作一个新的小部件,它是QTableWidget
+ QMenuBar
(具有QTableWidget
的特定配置)。 当前,我已经创建了一个MyWidget,它是从QWidget
派生的,并包含QTableWidget
+ QMenuBar
。 但是是否可以通过从QTableWidget
和QMenuBar
派生MyWidget
来做同样的事情? 如果可能的话,构造函数是什么样子?
由于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?)
不可能一次继承两个QWidget。 每个QWidget也是一个QObject。 MOC(元对象编译器)无法处理此类。
继承-关系是X isa Y
组成-关系是X具有Y
您有答案-X和Y之间是什么关系?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.