通过QObject子类最接近多重继承的解决方案

Closest solution to multiple inheritance through QObject subclasses

本文关键字:解决方案 多重继承 最接近 QObject 子类 通过      更新时间:2023-10-16

我有多个QObject子类,它们应该作为接口类,并由其他一些类实现(继承)。例如,设class A : virtual public QObjectclass B : virtual public QObject为接口类。我需要一个QDialog对象来实现它们的行为,如:class X: public QDialog, A, B

不幸的是,我在设计时没有仔细阅读文档,现在我意识到两个事实:

  1. 实现槽作为纯虚拟成员函数是不可能的,因为moc生成的代码需要调用它们。
  2. qobject派生类不支持多重继承。那不是钻石的事。这是因为moc生成的代码不能通过虚拟基将虚拟QObject对象static_cast转换为A*。(这是编译器说的!)

对代码影响最小的最佳替代设计是什么?我能想到宏观hack。也许基类中的宏(如Q_OBJECT)将所有成员,信号,基槽复制到派生类?

注释 QObject s不能被多次继承真是太糟糕了。不是吗?

如果你真的需要通过AB类公开QObject成员函数,创建一个抽象基类(即一个只有纯虚拟成员函数的类),比如AbstractQObject,并在那里重新声明你需要公开的QObject成员函数。

AB实际上是由AbstractQObjectX衍生而来,QDialogAB

这应该可以解决你所描述的问题,但我怀疑你最好重新设计你的代码