c++ - Qt 和 C++ : double inheritance vs composition?

标签 c++ qt inheritance

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

最佳答案

由于QTableWidget和QMenuBar都是继承自QWidget,所以我强烈建议不要使用双重继承。参见,例如 this question .

您目前所做的通常被认为是“正确”的方式,至少在 Qt 中是这样。我怀疑您想使用多重继承而不是组合的主要原因是您可能觉得您必须编写一堆函数,以便使用您的小部件的人可以,例如,添加到 QMenuBar。这样的函数可能如下所示:

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

对我来说这有点傻,相反我建议简单地为您的 QMenuBar 创建一个访问器函数:

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

现在有人使用你的类(class)就可以了

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

这种编码风格在 Qt 源代码中很常见,我认为它更简洁。

关于c++ - Qt 和 C++ : double inheritance vs composition?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11589126/

相关文章:

c++ - 更改默认代码 Visual Studio 2015 Community

c++ - 如何检测作为参数传递的函数的参数类型?

c++ - 如何将子项插入到 QTreeWidget 层次结构中?

qt - TextField 的动态验证器/运行时更改验证器

Java 监听器继承

c++ - 有没有办法从 `std::function` 返回到指针?

c++ - 取消 QTableView 中的单元格值

swift - 类扩展了 SKScene 但无法访问其属性

scala - 继承能够限制mixin组合目标的原因

c++ - 基于先前输入的同一行输入