- QT
- AbulEduApplicationV1
- AbulEduAproposV1
- AbulEduAudioV1
- AbulEduButtonListV1
- AbulEduCameraV1
- AbulEduCameraWidgetV1
- AbulEduConstantesV1
- AbulEduEditeur
- AbulEduGraphicsEtiquetteV1
- AbulEduIdentitesV1
- AbulEduInstructionV1
- AbulEduMediaplayerV1
- AbulEduMediathequeGetV1
- AbulEduMenuFeuilleV1
- AbulEduNumericLinearPadv1
- AbulEduQRCodeReaderV1
- AbulEduSingletonV1
- AbulEduSlideWidgetContainerV1
- AbulEduStackedWidgetV1
- AbulEduTexteV1
- AbulEduTextV1
- AbulEduTutorialV1
- AbulEduVirtualKeyboardV1
- AbulEduVisionneuseImageV1
- AbulEduWidgetAssistantEtapesV1
- Affichage des messages d'erreurs
- Affichage dynamique des étapes d'un éditeur
- Bouton croix de fenêtre
- Centrer une fenêtre
- Création fichierdossier temporaire unique
- Créer une AbulÉduApplicationV1 dans QtCreator
- Framework Graphic View
- Framework Graphic Viewodt
- Framework State Machine
- Générer automatiquement un dictionnaire de verbes
- Gérer la modalité des fenêtres
- Gestion des arguments
- Getters par référence et non par valeur
- Installation Qt5
- Installation Qt56
- Normalisation des modules
- Partager des variables avec différents pri
- Redimensionnement application Qt
- Redimensionner un QGraphicsSvgItem
- Tests et Logs sous Windows
- Utilisation de l'assistant AbulEduApplicationV1
- Utiliser des QSharedPointer
Harmonisations dans nos codes¶
J'ai trouvé ça :
http://geosoft.no/development/cppstyle.html
Quelques commentaires sur ces prescriptions (ce n'est pas parce que je dis dessous que je suis d'accord que j'ai pensé à le faire partout ;-) ).
Mon anglais sera parfait à partir de janvier 2012, mais ce n'est pas encore le cas : n'hésitez pas à me faire remarquer une erreur de traduction...
Je trouve bien et je vous propose de faire comme ça :¶
3. Les noms de types et de classes doivent utiliser UpperCamelCase
class MaNouvelleClasse
4. Les noms de variables doivent utiliser lowerCamelCase
int valeurNouvelle;
5. Les noms de constantes (y compris les énumérations) doivent être entièrement en majuscules, des underscores séparant les mots.
const int NOMBRE_ESSAIS=10;
6. Les noms de méthodes et de fonctions doivent être des verbes écrits en lowerCamelCase
void afficheResultat();
17. Les préfixes « get » et « set » doivent être utiliser pour accéder directement aux attributs (on appelle ces méthodes « accesseurs »)
int getMScore();
25. Les variables de boucles doivent être appelées « i », « j », « k », etc...
49. Les attributs de classe ne doivent jamais être déclarés en « public »
57. Les boucles « do...while » devraient être évitées (M.Ruby, mon prof de C++ à l'I.U.T., avait cette boucle en horreur absolue, argumentant que la plupart du temps on se trompe d'une fois dans le nombre d'itérations)
73. Les déclarations de classes doivent respecter cette forme :
class SomeClass : public BaseClass { public: … protected: … private: … public slots: … protected slots: … private slots: … signals: … }
75. Les structures « if-else » doivent respecter cette forme :
if (condition) { instructions; } else if (condition) { instructions; } else { instructions; }
Rmq 1 : mêmes alignements si instruction unique, sans accolade
if (condition) instruction; else instruction
Rmq 2 : structure similaire pour les boucles « for », « while »
80. Les structures « switch » doivent respecter cette forme :
switch (condition) { case 1 : instructions; break; case 2 : instructions; break; default : instructions; break; }
Je ne suis pas d'accord et je vous propose de faire autrement :¶
11. Les attributs privés de classes devraient être suffixées par un underscore (Je préfère préfixer par "m_")
int m_score; PLUTOT QUE int score_;
12&29. Les variables génériques (objets ou pointeurs) devraient porter le nom de leur type (Je trouve que c'est source de confusion quand on lit le code).
51. Les « * » et « & » qui caractérisent les pointeurs et référence en C++ doivent être collés au type plutôt qu'au nom
On décide ici de coller l'étoile ou l'esperluette au nom de la variable
QString *monNom; ET PAS QString* monNom;
71. L'indentation de base devrait être 2 (Moi je mets une tabulation. D'ailleurs c'est ce que fait l'indentation automatique de QtCreator (Ctrl + i) )
83. Les types de retour d'une fonction peuvent être alignés à gauche immédiatement au dessus du nom de la fonction (J'aime mieux sur la même ligne, pour rester cohérent avec le prototype du .h)
91. Les commentaires devraient toujours être rédigés en anglais (Restons français que diable !!)
Je ne faisais pas mais j'aime bien l'idée, et j'essaierai d'y penser :¶
26. Les méthodes dont le retour est un booléen ou les variables booléennes devraient être préfixés par « is »
bool isBonneIdee=true;
Dans certains cas, on peut aussi préférer :
bool hasLicense(); bool canEvaluate(); bool shouldSort();
28. Eviter les abréviations dans les noms (d'autant que l'autocomplétion fait qu'on se moque que les noms soient longs...)
int nombreBallonsPasses; PLUTOT QUE int nbBallPas;
66. Les valeurs entières passées aux variables déclarées comme décimales ou réelles doivent être écrites de façon décimale
float valeur=1.0; PLUTOT QUE float valeur=1;
70. "0" devrait être utilisé à la place de "NULL".
Réflexions supplémentaires¶
Les noms des objets et fonctions seront choisis en langue anglaise.
Dans l'application, on peut préfixer les objets en séparant l'abréviation de classe du nom choisi par un _
QListWidget lw_monListWidget;
Préfixe pour les objets usuels¶
Objet Qt | Préfixe | Exemple |
---|---|---|
PushButton | btn | btnBonjour |
CheckBox | cb | cbLangue |
RadioButton | rb | rbChoixA |
lineEdit | le | leLogin |
textEdit | te | teDescription |
label | lbl | lblLogin |
webView | web | webForum |
graphicsView | gv | gvPrincipale |
treeWidget | tw | twListeDetaillee |
groupBox | gb | gbParametres |
Autres objets moins souvent utilisés:
Objet Qt | Préfixe | Exemple |
---|---|---|
listView | lv ? | lvFichiers |
treeView | tv ? | tvArborescence |
tableView | tv ? | tvTableau |
listWidget | lw | |
tableWidget | ||
scrollArea | ||
tabWidget | ||
comboBox | cb | |
fontComboBox | ||
plainTextEdit | ||
spinBox | sb | |
horizontalScrollBar | ||
horizontalSlider | ||
verticalScrollBar | ||
verticalSlider | ||
textBrowser | tb | tbDescription |