繁体   English   中英

Qt和C ++:双重继承与合成?

[英]Qt and C++ : double inheritance vs composition?

我的问题如下。 我想制作一个新的小部件,它是QTableWidget + QMenuBar (具有QTableWidget的特定配置)。 当前,我已经创建了一个MyWidget,它是从QWidget派生的,并包含QTableWidget + QMenuBar 但是是否可以通过从QTableWidgetQMenuBar派生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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM