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

最佳答案

由于QTableWidget和QMenuBar都从QWidget继承,因此我强烈建议不要使用双重继承。例如,参见this question

至少在Qt中,您当前所做的事情通常被认为是“正确”的方法。我怀疑要使用多重继承而不是合成的主要原因是,您可能会觉得自己不得不编写一堆函数,以便使使用小部件的人可以将其添加到QMenuBar中。这样的功能可能看起来像这样:

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


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

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


现在有人在使用您的课程就可以

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


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

10-08 01:15