我需要创建一个继承自QTextEdit的对象。问题是每次我尝试从它继承时,我都会收到以下错误:
错误C2248:'QWidget :: operator =':无法从类'QWidget'访问私有声明的成员
我尝试定义operator=
但没有任何作用。即使我也定义了copy constructor
。我总是不断收到这个错误。
答案 0 :(得分:4)
QWidget
class是QObject
的子类,它使用Q_DISABLE_COPY
保护宏禁用了复制和赋值操作。当您从QObject
(或任何派生类)继承时,您定义的复制构造函数或赋值运算符会尝试访问基类的计数器部分,但它们在QObject
中是私有的,不能是访问。这是设计的。
作为副作用,从QObject
继承的类的对象不能存储在STL或Qt容器(向量,列表等)中。只能存储指针或引用。因为获取/设置对象需要使用复制构造函数进行复制,这是不可能的。
如果您需要继承QWidget
并重载operator=
和/或copy constructor
,则可以通过为isEqual
或{{clone
或{{QObject
这些任务添加显式方法来实现。 1}}(虽然克隆{{1}}不是good idea)。