如何从 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
,您可以通过为这些任务添加显式方法来实现,例如isEqual
或clone
(尽管克隆QObject
是不是good idea)。
【讨论】:
这个答案可以通过具体说明(或一个)修复是什么来改进。现在它只是解释为什么会发生错误。 您说每个Qt 类都是QObject
的子类,这是不正确的。并非所有 Qt 类都是 QObject
的子类。
@RakibulHasan 并不是说每个 Qt 类都是QObject
的子类。您是否坚持认为,例如 Qt 类 QPixmap
是 QObject
的子类?
@RakibulHasan 在文档的那部分,Qt object
与object
的含义不同,object
是一个类的实例。不过,他们使用的术语有点误导。
RakibulHasan, AndrewMedico:Qt 文档没有损坏,只是没有正确阅读。 Qt 类分为组。 Qt 对象类和 Qt 数据类是最大的两个组。 Qt 对象类都派生自 QObject 并采用信号/槽机制。 Qt 数据类大多只是专门的数据容器,但几乎都使用隐式共享机制,因此您可以按值传递而不必过多担心性能损失。以上是关于如何从 Qt 类继承? [复制]的主要内容,如果未能解决你的问题,请参考以下文章