Classes de base non-Qt

J’utilise Qt (dont je suis nouveau) 4.8.2, avec Visual Studio, et j’ai créé une classe de base nommée “Contact”. Je ne veux pas que cette classe soit exclusive à Qt , donc mon intention était de créer une autre classe “QContact” qui héritera de “Contact”, et QObject et traitera toutes les affaires liées à Qt, telles que la macro Q_OBJECT etc.

Malheureusement, lorsque j’ai hérité, la construction a échoué en disant:

moc_QContact.cpp(53): error C2039: 'staticMetaObject' : is not a member of 'Contact' moc_QContact.cpp(75): error C2039: 'qt_metacast' : is not a member of 'Contact' moc_QContact.cpp(80): error C2039: 'qt_metacall' : is not a member of 'Contact' 

J’ai fait quelques recherches sur le Web et découvert que vous ne pouviez pas dériver une classe Qt d’une classe non-Qt. pour résoudre ce problème, “Contact” pourrait hériter de “QObject” (j’ai essayé, ça a fonctionné). mais cela le rendra exclusif à Qt qui est mon problème.

Donc, ce que je demande, c’est ceci: comment pouvez-vous créer une classe de base non-Qt pour une classe Qt?

Je vous remercie.

Vous pouvez dériver votre classe de QObject et d’autres classes qui n’en dérivent pas, mais QObject doit être la première classe de base dans la liste des classes de base.

Donc, c’est faux:

 class QContact: public Contact, public QObject {}; 

Vous devez l’écrire comme

 class QContact: public QObject, public Contact {}; 

A partir d’ une introduction à la conception de Patters en C ++ avec Qt Chapitre 8.4:

Pour vous assurer que moc traite chaque classe dérivée de QObject dans le projet, vous trouverez ci-après des instructions pour l’écriture: Code C ++ et fichiers de projet qmake:

• Chaque définition de classe doit figurer dans son propre fichier .h.

• Son implémentation doit aller dans un fichier .cpp correspondant.

• Le fichier d’en-tête doit être «enveloppé» (par exemple, avec #ifndef) pour éviter les inclusions multiples. • Chaque fichier .cpp doit être répertorié dans la variable SOURCES du fichier de projet; sinon il ne sera pas compilé.

• Chaque fichier d’en-tête doit être répertorié dans la variable HEADERS du fichier .pro. Sans cela, moc ne prétraitera pas le fichier.

• La macro Q_OBJECT doit apparaître dans la définition de classe de chaque fichier d’en-tête dérivé de QObject afin que moc sache générer du code pour celui-ci.