Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我应该扩展QT小部件还是使用自己的包含小部件的类作为成员?_C++_Qt_Class - Fatal编程技术网

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

C++ 我应该扩展QT小部件还是使用自己的包含小部件的类作为成员?,c++,qt,class,C++,Qt,Class,在学习QT(使用C++)时,我一直在定义自己的类,这些类不是QObject的派生类。即使QT教程教您扩展他们的小部件以制作自己的小部件,我也不这么做,因为我认为如果我切换到另一个图形工具包,我的代码将更“可移植”,更少QT固有(如果有意义的话) 所以我的课是这样的- class mainWindow { QVBoxLayout *winLayout; public: QWidget *winWidget; mainWindow(); } …因此,

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

所以我的课是这样的-

class mainWindow
{
    QVBoxLayout *winLayout;
    public:
        QWidget *winWidget;
        mainWindow();
}
…因此,将主小部件作为公共成员,并从类中操作所有内容,添加方法来操作我的小部件

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


但现在我想知道,我的想法(一开始就解释过)是不是模糊不清?你认为我可以用我自己的方式来做这件事而不扩展自己的小部件来面对未来的任何问题吗?我应该坚持什么方法?

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

继承的唯一原因可能是为了保存其他QObject占用的一些内存,但如果您的类未在应用程序中广泛使用,则这不应该是一个问题

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

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


当我请求学习qt时,我也不喜欢将QWidget子类化,但很快我就意识到继承QWidget会更舒服,主要是因为如果有一天你需要事件交互,你不需要对类进行重大更改。

无论你做什么,你都会被qt卡住。就是那种框架,你说的那种是什么意思?Qt是否会用其他的特性扩展C++,这意味着切换到另一个框架将不仅仅是改变一些类。