如何从 Qt 类继承? [复制]

Posted

技术标签:

【中文标题】如何从 Qt 类继承? [复制]【英文标题】:How to inherit from a Qt class? [duplicate] 【发布时间】:2014-05-08 04:08:52 【问题描述】:

我需要创建一个继承自 QTextEdit 的对象。问题是每次我尝试从它继承时,都会出现以下错误:

错误 C2248:“QWidget::operator =”:无法访问类“QWidget”中声明的私有成员

我尝试定义operator=,但没有任何效果。即使我也定义了一个copy constructor。我总是不断收到这个错误。

【问题讨论】:

【参考方案1】:

QWidget 类是 QObject 的子类,它使用 Q_DISABLE_COPY 保护宏禁用了复制和赋值操作。当您从QObject(或任何派生类)继承时,您定义的复制构造函数或赋值运算符会尝试访问基类的对应部分,但它们在QObject 中是私有的,无法访问。这是设计使然。

作为副作用,从QObject 继承的类的对象不能存储在 STL 或 Qt 容器(向量、列表等)中。只能存储指针或引用。因为获取/设置对象需要使用复制构造函数进行复制,这是不可能的。

如果您既需要继承QWidget 又需要重载operator= 和/或copy constructor,您可以通过为这些任务添加显式方法来实现,例如isEqualclone(尽管克隆QObject 是不是good idea)。

【讨论】:

这个答案可以通过具体说明(或一个)修复是什么来改进。现在它只是解释为什么会发生错误。 您说每个Qt 类都是QObject 的子类,这是不正确的。并非所有 Qt 类都是 QObject 的子类。 @RakibulHasan 并不是说​​每个 Qt 类都是QObject 的子类。您是否坚持认为,例如 Qt 类 QPixmapQObject 的子类? @RakibulHasan 在文档的那部分,Qt objectobject 的含义不同,object 是一个类的实例。不过,他们使用的术语有点误导。 RakibulHasan, AndrewMedico:Qt 文档没有损坏,只是没有正确阅读。 Qt 类分为组。 Qt 对象类和 Qt 数据类是最大的两个组。 Qt 对象类都派生自 QObject 并采用信号/槽机制。 Qt 数据类大多只是专门的数据容器,但几乎都使用隐式共享机制,因此您可以按值传递而不必过多担心性能损失。

以上是关于如何从 Qt 类继承? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Qt - 从基类继承一个类

Qt无法从继承类访问*ui指针

来自两个抽象类的多重继承 (Qt)

复制从具有纯虚拟方法的类继承的类?

如何从 C++ 基类继承抽象行为

如何创建一个新类,我的两个类都将从中继承方法和属性? [复制]