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

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

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

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

【问题讨论】:

    标签: c++ qt inheritance


    【解决方案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 数据类大多只是专门的数据容器,但几乎都使用隐式共享机制,因此您可以按值传递而不必过多担心性能损失。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 2011-09-24
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    相关资源
    最近更新 更多