66 votes

Dans quelle mesure Qt est-il utilisable sans l'étape de prétraitement?

Je pense qu'il est déraisonnable d'une bibliothèque, d'exiger de prétraitement de mon code source avec un outil spécial. Cela dit, plusieurs personnes ont recommandé la bibliothèque Qt à moi pour la croix-plate-forme de développement du GUI.

Comment utiliser Qt sans l'étape de prétraitement?

EDIT: Bon les gens, je ne suis pas un sens à cette question comme un rip sur l'intervalle Qt -- trop de Qt fanboys sont la traiter comme si elle l'est. Je ne veux pas discuter du bien-fondé du fait que Qt est venu avec cette prétraitement de l'outil. Je comprends pourquoi l'outil est là, et je comprends pourquoi il y a de grandes parties de l'intervalle Qt, qui sont construits sur l'idée de prétraitement.

Je n'ai jamais utilisé Qt, ergo je ne suis pas en mesure de ripper sur elle. Mais je préférerais payer à l'écriture d'une petite quantité de passe-partout de moi-même et ne pas dépendre de les séparer de la totalité de mon processus de création. Je ne vais pas utiliser Flex et Bison dans mon projet actuel, pour la même raison; si je ne vais pas utiliser ces outils, je ne suis certainement pas utiliser un autre type de prétraitement.

Donc, merci de ne pas me prendre comme l'extraction sur l'intervalle Qt. Je ne peux pas commenter sur la façon de nice ou non il est agréable; je n'ai pas utilisé. Je veux juste savoir si il est possible de l'utiliser sans moc.

27voto

Matias Valdenegro Points 16473

Qt ne nécessite pas l'utilisation de moc, mais simplement son utilisation si vous créez une sous-classe de QObject, ainsi que la déclaration de signaux et d'emplacements dans vos classes personnalisées.

Ce n'est pas déraisonnable, moc fournit des fonctionnalités que C ++ ne possède pas, des signaux / slots, une introspection, etc.

Donc, pour faire quelque chose de très peu avancé, vous devrez utiliser le préprocesseur moc. Soit tu l'aimes, soit tu le détestes.

4voto

Tyler McHenry Points 35551

Je ne considère pas déraisonnable que Qt nécessite un pré-traitement de l'outil, compte tenu de la taille et de la complète d'une bibliothèque, il est.

D'autres de la même manière, les bibliothèques complètes telles que coup de pouce et GLib ne nécessitent pas de spécial pré-outils de traitement, mais ne font une utilisation intensive de la norme C préprocesseur. Qt pourrait avoir été mis en œuvre en utilisant seulement le préprocesseur C, mais en utilisant son propre outil de prétraitement, il peut fournir un produit de nettoyage de syntaxe et d'éviter de nombreux écueils liés avec du préprocesseur C macros.

Comme il a été déjà répondu, cependant, vous pouvez utiliser Qt sans moc, tout simplement pas tout ce qui exige des signaux et des slots. Oui, cela inclut tous de l'interface graphique de trucs, mais Qt n'est pas seulement une bibliothèque d'interface graphique.

4voto

TheUndeadFish Points 4278

Je n'ai pas de réponse, mais comme je la comprends, la moc principalement (ou peut-être seulement) génère plus de code C++. Donc, potentiellement, il n'y a rien, il ne fait que vous ne pouvez pas faire vous-même manuellement. Cependant, je n'ai aucune idée de comment pénible qui pourrait être, ni combien d'étude pour comprendre tous les concepts et les détails qui vont dans le code.


Aussi, comme je l'ai note de côté: À mon avis, la raison pour laquelle vous êtes obtenir beaucoup de défense de l'intervalle Qt et de la moc est parce que vous avez commencé votre question avec la très ferme "je pense qu'il est déraisonnable", qui est facilement interprété pour signifier que vous ne pensez pas que moc devrait jamais avoir existé. Ce distrait de votre question. Je pense qu'il aurait été mieux de simplement dire "moc ne rentre pas dans mon système de construction" ou tout simplement "j'ai mes propres raisons pour ne pas vouloir l'utiliser".

3voto

Sundar Points 174

Je ne peux vraiment pas penser à quelque chose d'aussi unique et utile avec Qt sans utiliser QObjects. J'espère qu'ils ont bien travaillé autour de cette étape de pré-compilation.

2voto

jkerian Points 8328

Est-il possible? Tant que vous n'avez pas à faire toute la programmation gui, probablement. Personnellement, j'ai surtout courir avec PyQt ces jours-ci, donc ce n'est pas une grande préoccupation pour moi.

Pourquoi vous ne devriez pas de soins: Compte tenu de la nature de la "précompilation" si vous êtes en utilisant cmake ou qmake, ce n'est pas vraiment un gros problème en termes d'inconvénients. Si vous êtes en train de faire quelque chose avec une interface graphique, ces jours-ci, vous devriez être en utilisant un concepteur graphique pour la plupart des travaux de toute façon, si vous êtes déjà ajouter des "pré-compilation".

Quant à pourquoi ils ont fait ça: Vous pourriez être intéressé de lire Qt explication: http://doc.qt.nokia.com/4.6/templates.html

Il se résume à:

  • Le modèle de solution manque de propriétés et de surcharge
  • Le moc solution empêche les signaux de rupture de compatibilité binaire
  • Analyse de l'exécution et de la modification sont possibles avec le non-basées sur des modèles de signaux/slots mécanisme

Sur une note côté, le multithreading, les signaux/slots sont aussi un avantage de leur système.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X