2009-09-02 8 views

Répondre

5

Nous un peu répondu dans votre autre question

Why does Qt use its own make tool, qmake?

Mais pour aller dans un peu plus en détail, le MOC parse votre fichier à la recherche de signaux/déclarations de fente (ainsi que les propriétés et les autres constructions supportées) et génère des fichiers de code intermédiaires basés sur ceux-ci. Ces fichiers de code intermédiaires fournissent un accès fortement typé aux signaux et aux emplacements que la bibliothèque doit utiliser pour communiquer avec vos objets. Qmake génère un fichier make qui inclut automatiquement ces fichiers intermédiaires (ainsi que toute interface utilisateur ou fichiers de ressources générés) ainsi que votre propre code afin que vous puissiez construire avec la chaîne d'outils de votre choix.

10

Comme d'autres ont dit, il y a une très bonne Qt documetnation disponible pour ce sujet. Si vous voulez savoir ce qui se passe sous le capot, cette information peut vous aider:

Les fentes sont juste des méthodes régulières. Rien de spécial là-bas, sauf moc va enregistrer leur signature dans une table dans le fichier intermédiaire .moc - vous pouvez voir cette table très clairement lorsque vous regardez ce fichier.

Ce tableau vous permet d'appeler une méthode en utilisant sa signature. La macro SLOT(mySlot(int)) se résume à une représentation sous forme de chaîne de la méthode en question. Vous pouvez le faire de plusieurs façons, voir la documentation pour QMetaObject par exemple.

Lorsque vous connectez un signal à un emplacement, les signatures de signal et de logement sont stockées pour une utilisation ultérieure. Lorsqu'un signal est émis, tous les emplacements précédemment connectés à ce signal sont appelés en utilisant la méthode décrite ci-dessus.

Si vous voulez en savoir plus, je suggère de regarder à travers le code généré par moc, et de passer au travers d'une émission de signal et les internes de l'appel connect(). Il n'y a pas de magie ici, mais il y a beaucoup d'intelligence.

+1

beaucoup d'intelligence, mais pas de magie! me rappelle http://catb.org/esr/jargon/html/magic-story.html – jrharshath

+0

Et il y a 2 types de connexion là-bas. Premier: les slots sont appelés au moment où le signal a été émis. Et le second: les appels de slots sont placés dans la file d'attente de boucle d'événements. Vous pouvez sélectionner manuellement la méthode dans connect, mais le signal de connexion et les emplacements de différents threads sont toujours mis en file d'attente. – JustAnotherCurious

Questions connexes