I am trying to use mix in classes for C++/Qt to provide a whole bunch of widgets with a common interface. The interface is defined in such as way so that if it is defined as the base class for other widget classes, then the widget themselves will have those signals:
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
}
Looking at the class hierarchy the problem becomes apparent, I have stumbled on to the dreaded diamond in multiple inheritance, where the Widget1
inherits from QWidget
and SignalInterface
, and both which inherit from QObject
. Will this cause any issues?
We know that this problem can be easily solved if the QObject
class is pure virtual (which is not the case).
A possible solution would be:
class Interface: public QWidget {
Q_OBJECT
signals:
void IconChanged(QIcon);
void titleChanged(QString);
}
class Widget1: public Interface {
}
The issue here is that I already have lot of code that inherit from QWidget
, and its painful to hack that in. Is there another way?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…