QT:继承导致模棱两可

Qt: inheritance cause ambiguous

本文关键字:模棱两可 继承 QT      更新时间:2023-10-16

我有以下情况:

class A: public QObject
class B: public A, public QThread

然后,继承模棱两可,因为qobject是继承两次...有针对这个的解决方法吗?

QThreadQObject中非虚拟继承。因此,没有办法从QThreadQObject继承层次结构而不会产生歧义。虚拟继承在这里无济于事,因为您没有处理任何钻石继承模式。

修复程序是改变您的设计,如@gabor Angyal所述。

相关问题:我如何从qwidget和qthread继承?

qObject基类的多个继承不起作用。

您可以做这样的事情来解决此问题:

class A: public QObject
class B: public A
{
    Q_OBJECT
public:
    //...
    QThread *threadController() { return &mThreadController; }
private:
    //...
    QThread mThreadController;
}

您还可以为所需的信号和插槽编写委托,而不是揭露整个QThread对象,或者只为B类编写更高的级别API,然后将其内部QThread完全隐藏。取决于您要做什么。

如果您确实需要子类qthread,则只需将其用作成员变量类型。

有点棘手,但可能对您有用:

template<class T>
class A: public T
class B: public A<QThread>

,如果您需要单独使用一个,则:

A<QObject> *a = new A<QObject>;

此模式称为Mixin。

update

好吧,我意识到MOC系统显然无法使用此解决方案。我支持海德的答案。