Множественное наследование QObject

Я пытаюсь использовать mix in классы для C++/Qt для предоставления целой кучи виджетов с общим интерфейсом. Интерфейс определен таким образом, что если он определен как базовый класс для других классов виджетов, то сами виджеты будут иметь эти сигналы. т.е. смотрите ниже.

class SignalInterface: public QObject {
    Q_OBJECT

    public:
    SignalInterface();
    virtual ~SignalInterface();

    signals:
    void iconChanged(QIcon);
    void titleChanged(QString);
}

class Widget1: public SignalInterface, QWidget{

    public:
    Widget1()
    virtual ~Widget1()

    // The Widget Should Inherit the signals
}

Глядя на иерархию классов, проблема становится очевидной, я наткнулся на страшный алмаз множественного наследования, где Widget1 наследуется от QWidget, и SignalInterface, и оба они наследуются от QObject. Вызовет ли это какие-либо проблемы?

Мы знаем, что эта проблема может быть легко решена, если класс QObject является чисто виртуальным (что не так).

Возможным решением было бы

class Interface: public QWidget {
Q_OBJECT

signals:
void IconChanged(QIcon);
void titleChanged(QString);
}

class Widget1: public Interface {

}

Проблема здесь в том, что у меня уже есть много кода, который наследуется от QWidget, и его болезненно взламывать. Есть ли другой способ?

41
задан Daniel Daranas 20 December 2011 в 21:21
поделиться