Qt:继承导致模棱两可

时间:2015-05-15 18:54:23

标签: c++ qt

我有以下情况:

class A: public QObject

class B: public A, public QThread

然后由于QObject被继承两次而导致继承不明确... 这个问题有方法解决吗?

3 个答案:

答案 0 :(得分:3)

QThreadQObject继承非虚拟内容。因此,无法在不产生歧义的情况下从QThreadQObject继承层次结构。虚拟继承在这里没有用,因为你没有处理任何钻石继承模式。

正如@Gabor Angyal所提到的,修复是改变你的设计。

相关问题:how can i inherit from both QWidget and QThread?

答案 1 :(得分:1)

有点棘手,但可能适合你:

template<class T>
class A: public T

class B: public A<QThread>

如果您需要单独使用A,那么:

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

此模式称为Mixin

<强>更新

好的,我意识到moc系统显然无法使用此解决方案。我支持hyde's answer

答案 2 :(得分:1)

QObject基类的多重继承不起作用。

你可以做这样的事情来解决这个问题:

class A: public QObject

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

private:
    //...
    QThread mThreadController;

}

您还可以为所需的信号和插槽编写代理,而不是暴露整个QThread对象,或者只为B类编写更高级别的API,并使其内部QThread完全隐藏。取决于你想要做什么,真的。

如果你真的需要继承QThread,那么只需将其用作成员变量类型。