如何从Qt类继承?

时间:2014-05-08 04:08:52

标签: c++ qt inheritance

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

  

错误C2248:'QWidget :: operator =':无法从类'QWidget'访问私有声明的成员

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

1 个答案:

答案 0 :(得分:4)

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

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

如果您需要继承QWidget并重载operator=和/或copy constructor,则可以通过为isEqual或{{clone或{{QObject这些任务添加显式方法来实现。 1}}(虽然克隆{{1}}不是good idea)。