2013-11-06 6 views
1

У меня есть класс, который будет прослушивать через соединение с некоторыми сигналами в нескольких разных контекстах, и диалог, который произнес бы слух между прочим.Множественное наследование QObject

class MyListener : public QObject 
{ 
    Q_OBJECT 
}; 

class MyDialog : public QDialog, public MyListener 
{ 
    Q_OBJECT 
}; 

Это вызвало следующую ошибку компиляции:

ошибка: Ссылка на «Connect» неоднозначен

Я подозревал, что может быть вызвано множественное наследование от QObject по MyDialog, один раз через QDialog и один раз через MyListener. Однако, делая все вышеприведенные операторы наследования виртуальными, не устранили ошибку.

Не могли бы вы предложить, что может быть причиной этого?

+0

Вы используете версию 4.8 или 5.1.1? –

ответ

3

Сделать это:

class MyDialog : public QDialog 
{ 
    Q_OBJECT 

    public: 
    MyListener& listener() { return m_listener; } 

    private: 
    MyListener m_listener; 
}; 
1

Вы считали, что наследуете свой QObject как защищенный? Это связано с тем, что оба класса используют функцию connect() для соединения слотов и сигналов вместе в вашем файле .ui, каждый из которых наследует друг друга. Теперь у вас есть две возможности подключения, когда программа делает вызов для подключения вашего сигнала/слота.

имеют свои необходимые функции под защитой и предотвратить неоднозначность два connect()

class MyListener 
{ 
    public: 
     //... 
    protected: 
     int a; 
     //stuff to share 
}; 

class MyDialog: public QDialog, protected MyListener 
{ 

    //has access to all protected members but not the private members 
}; 
1

making all the above inheritance statements virtual didn't eliminate the error.

ожидается, как virtual ключевого слова влияет только на непосредственный базовый класс. То есть MyListener все еще наследует QObject не виртуально. Вы не можете это изменить.

Кроме того, документация говорит

Virtual inheritance with QObject is not supported.

Единственным разумным решением является MyListenerне наследовать QObject.

Смежные вопросы