Я пытаюсь использовать 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, и его болезненно взламывать. Есть ли другой способ?