QObject L'Héritage Multiple
Je suis en train d'utiliser le mélange dans les classes en C++/Qt pour fournir tout un tas de widgets avec une interface commune. L'interface est définie de telle manière que si elle est définie comme la classe de base pour d'autres widget classes, puis le widget eux-mêmes de ces signaux. ie reportez-vous ci-dessous.
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
}
À la recherche à la hiérarchie de classe le problème devient évident, j'ai trébuché sur le redoutable diamant dans l'Héritage Multiple, où la Widget1 hérite de QWidget, et SignalInterface, et les deux qui hérite de QObject. Cela peut-il poser des problèmes?
Nous savons que ce problème peut être facilement résolu si la classe QObject est virtuelle pure (qui n'est pas le cas).
Une solution possible serait
class Interface: public QWidget {
Q_OBJECT
signals:
void IconChanged(QIcon);
void titleChanged(QString);
}
class Widget1: public Interface {
}
Ici, le problème est que j'ai déjà beaucoup de code qui hérite de QWidget, et de sa douloureuse pour les adapter dans. Est-il une autre voie?
- Regardez: stackoverflow.com/questions/17943496/...
- J'ai rencontré ce problème et je viens d'ajouter un émetteur de signaux en tant que membre de base de l'interface à la place de sa classe de base.
Vous devez vous connecter pour publier un commentaire.
Malheureusement hériter
QObject
deux fois à cause des problèmes dansmoc
.De http://qt-project.org:
Je vous suggérons d'utiliser quelque chose de plus comme le modèle de délégué, ou le recréer avec un HasA pas un IsA relation.
Qt permet l'héritage multiple si la classe de base hérite privé de QObject.
Exemple:
Bien sûr, privé de l'héritage est un animal tout à fait différent et ne peut pas vous donner la solution dont vous avez vraiment besoin. Ce que j'utilise c'est quand je peux sortir avec l'aide de signaux/slots seulement dans la classe de base. Quand j'ai vraiment besoin
QObject
comportement dans une classe dérivée, j'ai hériter deQObject
spécialement pour cette classe.