0

我的问题如下。我想制作一个新的小部件,它是 a QTableWidget+ a QMenuBar(具有特定配置QTableWidget)。目前,我创建了一个 MyWidget ,它源自QWidget并包含 a QTableWidget+ a QMenuBarMyWidget但是是否有可能通过从QTableWidgetand派生来做同样的事情QMenuBar?如果有可能构造函数是什么样的?

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

一次从两个 QWidget 继承是不可能的。每个 QWidget 也是一个 QObject。MOC(元对象编译器)无法处理此类。

于 2012-07-24T21:51:47.263 回答
0

继承 - 关系是 X isa Y

组合 - 关系是 X 有一个 Y

有你的答案 - X 和 Y 之间的关系是什么?

于 2012-07-21T03:52:57.773 回答