Estoy tratando de usar mix en clases para C++/Qt para proporcionar un conjunto completo de widgets con una interfaz común. La interfaz se define de tal manera que si se define como la clase base para otras clases de widgets, entonces el widget tendrá esas señales. es decir, consulte a continuación.QObject Multiple Herencia
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
}
En cuanto a la jerarquía de clases el problema se hace evidente, he tropezado con el diamante temida en herencia múltiple, donde el Widget1 hereda de QWidget y SignalInterface, y tanto, que heredar de QObject. ¿Esto causará algún problema?
Sabemos que este problema se puede resolver fácilmente si la clase QObject es puramente virtual (lo cual no es el caso).
Una posible solución sería
class Interface: public QWidget {
Q_OBJECT
signals:
void IconChanged(QIcon);
void titleChanged(QString);
}
class Widget1: public Interface {
}
El problema aquí es que ya tengo gran cantidad de código que heredan de QWidget, y su dolorosa para introducirse en el que. ¿Hay alguna otra manera?
Eche un vistazo a: http://stackoverflow.com/questions/17943496/declare-abstract-signal-in-interface-class/17943699#17943699 –