Dan*_*aum 5 c++ qt multiple-inheritance
我知道一般来说,Qt 不支持从 -QObject派生类(甚至虚拟多重继承)的多重继承。
我理解原因是(我认为)即使在虚拟继承的情况下,Qt 类本身也不会从QObject. 例如,如果您尝试从QWidget和虚拟派生一个类QThread,这会将虚拟继承放在继承链中不相关的位置,并且您仍然会得到两个QObject实例。
因此,我认为使用虚拟继承是安全的,并且在 Qt 中得到支持,其中唯一派生的 Qt 类是QObject它本身。
我有:
class Top : public QObject {};
class Left : public virtual Top {};
class Right : public virtual Top {};
class Bottom : public Left, public Right {}; // Is this safe, and supported by Qt?
Run Code Online (Sandbox Code Playgroud)
请注意,Bottom真正的实例只有一个实例Top(因此只有一个实例QObject),因此似乎在 Qt 中避免多重继承(甚至虚拟多重继承)的基本原理在这里并不适用。
尽管如此,上述构造仍会导致 Qt 编译器警告Class Bottom inherits from two QObject subclasses Left and Right. This is not supported!。
我对么?在这种特定情况下忽略 Qt 编译器警告是否安全?上面的构造,涉及直接来自 QObject 的虚拟多重继承,是否安全并在 Qt 中受支持?
QObject不, Qt 不以任何方式支持多重继承。
问题不在于虚拟继承,而在于 Qt 的元对象系统。每个QObject基类都有一个关联的QMetaObject管理信号、槽、属性等,并且每个元对象都知道其父类,QObject因此可以处理父类中存在的信号等。Qt moc 无法处理来自QObject其任何子类的多重继承。
| 归档时间: |
|
| 查看次数: |
2122 次 |
| 最近记录: |