Je me demande pourquoi Qt utilise Q avant chaque nom de classe plutôt que de tout mettre dans un espace de noms. Y a-t-il une raison particulière, par exemple de faciliter la recherche des noms, ou s'agit-il uniquement de noms de marque?Quelle est la logique derrière la façon Qt de nommer les classes?
Répondre
Je crois que c'est historique. Les espaces de noms ont été introduits dans C++ vers 1995. Le développement de Qt a commencé en 1991, donc les espaces de noms n'ont pas pu être utilisés, évidemment.
Cela peut être un problème de portabilité. Les espaces de noms n'étaient pas/ne sont pas supportés par tous les compilateurs, donc la convention de nommage aide à réduire les conflits de noms.
par défaut le code généré à partir de Qt Designer utilise ui :: namespace ... Je suppose que ce n'est peut-être pas le problème – yesraaj
Oui, et Qt _does_ ont un espace de noms 'Qt'. Il ne contient pas les classes, seulement quelques énumérations. –
Qt est très conservateur sur les fonctionnalités du langage C++ qu'il utilise. Aucun espace de noms, exceptions or RTTI. Voir également this article détaillant pourquoi les modèles ne sont pas utilisés dans la gestion des signaux/emplacements.
Bien que je convienne que Qt est conservateur, votre lien vers aucun modèle est spécifique au mécanisme de signal/slot. Qt utilise définitivement des modèles dans beaucoup de leur code. Les exceptions et les trucs RTTI est dû à être utilisé sur les périphériques embarqués, je parierais. De nombreuses applications intégrées évitent celles pour les frais généraux qu'elles ajoutent. –
C'est un bon point, et correct. Va modifier la réponse! –
Voyant que il n'y a pas une gauche unique compilateur ++ C qui ne met pas en œuvre namespaces, de nos jours il n'y a qu'une seule raison: l'image de marque :)
aucun compilateur actuel peut-être. mais il y a beaucoup de gens qui utilisent encore des compilateurs plus anciens qui ne peuvent/ne peuvent pas mettre à jour vers la dernière version. Je ne dis pas que c'est une bonne situation, mais parfois vous êtes juste coincé avec l'utilisation d'un vieux compilateur merdique, pour un certain nombre de raisons techniques/non techniques. – Glen
Même si tout le monde utilise de nouveaux compilateurs qui supportent correctement les espaces de noms (et je ne suis pas d'accord avec votre déclaration BTW - il y a encore des compilateurs actuels qui ne supportent pas correctement toutes les nuances des espaces de noms) utilise la convention de nommage en cours. Est-ce que vous vous attendez à ce que tout le monde change tout son code Qt en une nouvelle convention de nommage juste pour utiliser les espaces de noms? – Thomi
@Glen, Thomi: Qt utilise des espaces de noms de nos jours (depuis la version 4.0), donc tout compilateur laissé sans au moins un support de base n'est plus supporté par Qt (ne peut pas être supporté). –
La documentation de Qt fait référence à namespaces, bien que je n'ai pas vérifié le code voir si elles sont vraiment C++ namespace
s ou un hack avec des déclarations publiques à l'intérieur d'une classe. Je suppose que le reste tente d'éviter de causer tout le monde à besoin de renommer tout, bien qu'ils puissent fournir un chemin de migration s'ils voulaient, comme ceci:
namespace Qt
{
class Object { ... };
}
#ifndef NO_OLD_DECLS
typedef Qt::Object QObject;
#endif
Qt utilise un préfixe Q dans le cadre de leur codage style. Cela sert habituellement à faciliter la lecture du code et à repérer ce qui est quoi.
Un identifiant:
- est préfixé par « Q » et suffixé avec « Private » est une classe privée utilisée pour les détails de mise en œuvre et ne fait pas partie de l'API (par exemple QPainterPrivate)
- est préfixé avec « Q » et non suffixé par « privé » est une classe publique (par exemple QWidget)
- est préfixé par « q » (minuscule) est une fonction publique dans le monde (par exemple QRgb)
En adoptant un style de codage et en l'utilisant uniformément, il est beaucoup plus facile pour les autres de comprendre le code qu'ils n'ont pas écrit.
Ref .: Qt Coding Style
Je sais qu'il est tatillon, mais "rationnel" devrait être "Justification". –
juste tapi. Personnellement, en tant que non-anglophone, j'aime être corrigé. Je préfère fortement être corrigé que de continuer à utiliser un mot ou une phrase erronée sans le savoir. –
@Matthew Talbert Je suis aussi d'accord avec Stefano vous êtes les bienvenus Matthew – yesraaj