Question

Dans Qt, les deux sont valables, et se comportent de la même:

emit someSignal(value);

vs

emit(someSignal(value));

Quelle est la différence?

Était-ce utile?

La solution

Quelle est la différence?

Il n'y a pas de différence autre que le support externe étant inutile, donc, les programmeurs préfèrent que, et il est aussi plus classiquement utilisés dans Qt projets en cours.

La raison de l'absence de différence est due à ceci:

# define emit

Vous pouvez voir la définition de ce dans le code source.

Par conséquent, il est fondamentalement juste déclaré à un "vide", de chaîne et de préprocesseur remplace variantes:

someSignal(value);

ou

(someSignal(value));

Vous le voyez vous-même si, pour un test rapide, vous arrêtez l'exécution du compilateur après le préprocesseur est exécuté, par exemplel' -E option en cas de gcc.

Plus d'informations:quelqu'un dans le commentaire qui avait des doutes sur le mot clé emit parce qu'il pollue la macro global de l'espace de noms.C'est vrai, mais c'est une bonne manière de garantir qu'il ya une certaine manière commune de faire ce qui est une bonne chose.

D'autre part, ce n'est pas obligatoire, donc n'importe qui pourrait redéfinir, la destruction, ou même de l'éteindre en disant Qt ne pas utiliser des mots-clés comme suit:

CONFIG += no_keywords

De cette façon, il pourrait être encore possible d'utiliser l'intervalle Qt signal-slot mécanisme de Q_SIGNAL, Q_SIGNALS, Q_SLOT, Q_SLOTS, Q_EMIT et tout cela.

Ici vous pouvez trouver les la documentation correspondante sur Q_EMIT, par exemple:

Q_EMIT

Utiliser cette macro pour remplacer le mot clé emit pour émettre des signaux, lorsque vous souhaitez utiliser Qt Signaux et les Slots avec une 3ème partie de signal/slot mécanisme.

La macro est normalement utilisé lors de la no_keywords est spécifié avec la variable de CONFIG dans le .fichier pro, mais il peut être utilisé même lorsque no_keywords n'est pas spécifié.

Autres conseils

Il n'y a pas de différence.En fait, emit est défini comme un vide macro, il suffit donc de

someSignal(value);

est également équivalent.L' emit il fait juste plus évident que vous êtes le déclenchement d'un signal Qt.

Il n'y a absolument aucune différence.C'est une définition de préprocesseur vide et est donc supprimée avant que le compilateur ne puisse voir le code.En ce qui concerne le compilateur concerné, cela n'existe même pas.

Il existe uniquement uniquement au profit du programmeur, de le faire savoir qu'à ce stade, un signal pourrait éventuellement être traité et pourrait aider au débogage du code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top