如何从Qt类继承

How to inherit from a Qt class?

本文关键字:继承 Qt      更新时间:2023-10-16

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

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

我尝试定义operator=和没有工作。即使我也定义了copy constructor。我总是得到这个错误

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

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

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