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

标签 c++ qt class

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

所以我的类(class)是这样的。-

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

...因此,将主要小部件作为公共(public)成员,所有内容都在类中进行操作,添加方法来操作我的小部件。

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

但现在我想知道,我的想法(一开始就解释过)是不是有点模糊?您是否认为我可以按照自己的方式这样做而不扩展 QT 自己的小部件,从而在未来遇到任何问题?我应该坚持什么方法?

最佳答案

您的类不是合适的 QWidget,但我认为这对 Qt 来说不是问题。除非您需要访问 wigets 的某些 protected 元素(例如,与事件交互),否则您无需继承 qt widgets - 设计的选择权在您手中。

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

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

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

当我开始学习 qt 时,我也厌恶继承 QWidgets,但很快我意识到继承更舒服,主要是因为如果有一天你需要事件,你不需要对你的类进行重大更改-互动。

关于c++ - 我应该扩展 QT 小部件还是使用我自己的包含小部件的类作为成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7439762/

相关文章:

qt - 父元素的 QML 填充宽度

c++ - C++ 中的模板类和函数重载

c++ - 是否可以根据整数模板参数构造成员数组的元素?

c++ - visual studio - 同时运行多个应用程序

c++ - 将子部件放在父部件的特定位置

java - Comparator中的compare(T,T)不能应用于(T,T)

java - 找不到java中以下方法的错误

c++ - 如何将枚举类型的数据保存到文件?

c++ - 如何修改数组指针并将其作为参数传递给需要数组作为参数的函数?

java - Netbeans 中的 GUI 设计器 [Qt 或 GTK]