2009-09-07 8 views
21

J'ai ma classe X qui hérite de la classe Qt Base. J'ai déclaré et défini void mySlot() slot dans ma classe X et je suis en train de connecter un signal à cet emplacement dans le constructeur de X. Cependant, lors de l'exécution de mon programme, je reçois un message d'erreur disant qu'il n'y a pas de slot tel que void mySlot() dans la classe Base.Pourquoi Qt cherche-t-il mon slot dans la classe de base au lieu d'un dérivé?

Pourquoi le code généré par Meta Object Compiler (moc) recherche-t-il mon emplacement dans la classe de base et non dans ma classe (dérivée)?

Répondre

45

Avez-vous ajouté la macro Q_OBJECT sur la classe dérivée?

6

De #qt irc

  1. Assurez-vous que la macro Q_OBJECT est présent dans la définition de toutes les classes dérivées QObject.
  2. Assurez-vous de déclarer vos classes dérivées de QObject dans vos fichiers d'en-tête SEULEMENT.
  3. Assurez-vous que tous vos fichiers d'en-tête sont répertoriés dans votre fichier .pro dans la liste HEADERS =.
  4. Exécutez qmake à chaque fois que vous ajoutez Q_OBJECT à l'une de vos classes ou modifiez votre fichier .pro.