我应该扩展QT小部件还是使用我自己的包含小部件的类作为成员?

时间:2011-09-16 03:14:30

标签: c++ qt class

学习QT(使用C ++),我一直在定义自己的类,而不是QObjects派生。即使QT教程教你扩展他们的小部件以制作你自己的小部件我不喜欢因为我认为我的代码会更“便携”并且更少QT固有(如果这是有道理的)以防我切换到另一个图形工具包。

所以我的课程是这样的.-

class mainWindow
{
    QVBoxLayout *winLayout;
    public:
        QWidget *winWidget;
        mainWindow();
}

...所以,将主要小部件作为公共成员,并在类中操作所有内容,添加操作我的小部件的方法。

如果我需要Signals和Slots,我会创建一个扩展QObject的类并使用Q_OBJECT宏。

但现在我想知道,我的观念(开头解释)是否含糊不清?您是否认为我可以通过这样做而不是扩展QT自己的小部件来面对任何问题?我应该坚持哪种方法?

1 个答案:

答案 0 :(得分:2)

你的clas不是一个合适的QWidget,但我不认为这对Qt来说是个问题。除非你需要访问wigets的一些受保护元素(例如,与事件交互),否则你可以永远不会继承qt小部件 - 设计的选择就是你的。

继承的唯一原因可能是保存额外QObject占用的内存,但如果您的类在应用程序中没有被广泛使用,那么这应该不是问题。

关于减少“Qt固有”我只能说将应用程序从一个框架移动到另一个框架通常需要进行大量的更改,这与设计无关,所以这个问题并没有真正说服我。

另一方面,将公共字段保存在这样的类中通常是个坏主意 - 意外修改会导致难以跟踪错误 - 考虑将winWidget设为私有并可能添加一些访问方法?

当我开始学习qt时,我也厌恶继承QWidgets,但很快我意识到继承更加舒适,主要是因为如果有一天你需要事件,你不需要对你的课程进行大量修改-interaction。