2

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

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

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

什么是尽可能少地影响代码的最佳替代设计?我可以想到宏黑客。也许基类中的宏(如Q_OBJECT)将基类的所有成员、信号、插槽复制到派生类?

注意QObjects 不能被多次继承真的很糟糕。不是吗?

4

1 回答 1

2

如果您确实需要通过您的和类公开QObject成员函数,请创建一个抽象基类(即仅具有纯虚成员函数的类),例如,然后在此处重新声明您需要公开的成员函数。ABAbstractQObjectQObject

从和,和, 和 虚拟地具有AB派生。AbstractQObjectXQDialogAB

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

于 2014-03-27T17:16:22.047 回答