Я пытаюсь использовать mix в классах для С++/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
}
Посмотрев на иерархию классов, проблема становится очевидной, я наткнулся на страшный бриллиант в Multiple Inheritance, где Widget1 наследует от QWidget и SignalInterface, и те, которые наследуются от QObject. Это вызовет какие-либо проблемы?
Мы знаем, что эта проблема может быть легко решена, если класс QObject является чисто виртуальным (что не так).
Возможное решение:
class Interface: public QWidget {
Q_OBJECT
signals:
void IconChanged(QIcon);
void titleChanged(QString);
}
class Widget1: public Interface {
}
Проблема в том, что у меня уже есть много кода, который наследуется от QWidget, и его больно взломать это. Есть ли другой способ?