Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3011 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  QT & Dev-C++ : Problème avec moc

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

QT & Dev-C++ : Problème avec moc

n°1333659
alternativ​e
Posté le 28-03-2006 à 14:12:39  profilanswer
 

J'ai appris que pour utiliser QT, il faut se servir de "moc" (Meta Object Compiler).
 
J'utilise Dev-C++ (4.9.9.2) et Qt (4.1.1)... mais impossible de faire comprendre à Dev-C++ qu'il faut qu'il prenne en compte le moc.exe (ou qqchose dans le genre) pour compiler et faire l'édition de lien.
 
J'ai cherché sur Google car le problème est assez connu il parait, mais j'ai eu beau essayer de faire tout sur ce quoi je suis tombé... ben rien n'y fait. D'autant plus que la plupart du temps ce sont des explications pour QT3 ou des Dev-C++ antérieurs :/
 
Alors voilà, si quelqu'un a l'habitude d'utiliser QT, merci de m'aider svp :'(
 
Si vous voulez + d'informations ben je peux rajouter que l'erreur est la suivante :
 


main.o(.text+0x132):main.cpp: undefined reference to `vtable for FenetrePrincipale'
FenetrePrincipale.o(.text+0x7d):FenetrePrincipale.cpp: undefined reference to `vtable for FenetrePrincipale'


 
Et ca vient de cette ligne (le Q_OBJECT) :
 

Code :
  1. class FenetrePrincipale : public QWidget
  2. {
  3.    Q_OBJECT

 

Pour l'instant je sais seulement que ca vient de moc, mais malgré ce que j'ai lu (en anglais en plus la plupart du temps), je comprends toujours pas l'utilité de cette chose et comment l'intégrer à dev-c++...
 
Si l'un de vous a un peu de temps... merci par avance...

mood
Publicité
Posté le 28-03-2006 à 14:12:39  profilanswer
 

n°1333849
Dumbledore
Posté le 28-03-2006 à 17:06:26  profilanswer
 

disons que "à la main", il faut appeler moc sur le fichier .h qui contient ta classe pour générer un nouveau fichier C++
 
exemple : t'as ton fichier fenetreprincipale.h et fenetreprincipale.cpp
 
tu fais :

moc fenetreprincipale.h -o moc_fenetreprincipale.cpp


 
puis tu compile :

g++ moc_fenetreprincipale.cpp fenetreprincipale.cpp -o fenetreprincipale


(avec toutes les options nécessaires à GCC pour linker avec QT)
 
Sinon, mettre la ligne "Q_OBJECT" dans une classe n'est utile que si tu a déclaré des slots ou des signaux dedans.
 
Pour les explications, je pense que ça ne doit pas être compliqué d'adapter celles de QT3 à QT4.
 
(ne me demande pas, je ne code que sous Linux, jamais sous Windows)


Message édité par Dumbledore le 28-03-2006 à 17:10:09
n°1333893
alternativ​e
Posté le 28-03-2006 à 17:37:38  profilanswer
 

He bien je te remercie parce que ça marche désormais !
 
J'ai suivi tes conseils et surtout je me suis désormais fait un .bat avec les g++ pour que je puisse compiler un peu comme je le veux.
 
Désormais mes slots fonctionnent, c'est agréable... j'espère que sous Linux j'arriverai aussi à faire fonctionner Qt assez rapidement...


Message édité par alternative le 28-03-2006 à 17:40:54
n°1334240
IrmatDen
Posté le 28-03-2006 à 23:17:48  profilanswer
 

Salut,
Si tu veux éviter la gestion laborieuse des batches, je te conseillerais de jeter un oeil à qmake et sa doc. Tu crée un fichier .pro (que ce soit à la main ou par qmake), tu le balances à qmake, et il te génère un makefile qui appelles après soit le makefile.debug, soit le makefile.release selon la config utilisé dans ton .pro
Ca fait longtemps que je n'ai pas utiliser dev-c++, mais tu dois pouvoir te créer un outil qui t'appelleras qmake selon ton projet, et préciser que tu veux utiliser tel makefile (celui généré par qmake).

n°1334299
nargy
Posté le 29-03-2006 à 00:32:07  profilanswer
 

En gros MOC te permet de défnir des signaux et des slots dans tes classes où se trouve Q_OBJECT.
 
Moc ajoute aussi des champs et des fonctions à tes classes: nom de la classe, nom des classes héritées, ...
 
Pour celà tu doit passer ton .H à moc, il crée alors un fichier moc_*.cpp que tu compile avec le reste.
 
Si tu mets Q_OBJECT dans une classe sans la moc-quer tu obtient des erreurs à l édition des liens.
 
C est pas du 100% objet tout ça, surtout que signal/slot sont faisables avec des templates. Mais dans les premières versions de Qt les compilos étaient pas aussi évolués qu aujourd hui.

n°1334481
Dumbledore
Posté le 29-03-2006 à 11:47:03  profilanswer
 

nargy, j'ai déjà expliqué...
 
Qt, c'est plus de la prog orientée évènement que de la prog objet


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  QT & Dev-C++ : Problème avec moc

 

Sujets relatifs
Problème avec un onblur...[résolu] Problème bouton / javascript
Problème de ponctuation ds un fichier texte dynamique ds flashProblème Validation css
Probleme de cryptage de mot de passeProbleme pour Modifier mon formulaire
[resolu]Problème d'alignementProbleme de taille de structure avec char[] et double
Problème lors d'insertion lignes dans tableau [résolu][Résolu] Probleme boucle toute simple pourtant
Plus de sujets relatifs à : QT & Dev-C++ : Problème avec moc


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)