Développement avec Qt/C++¶
Installation¶
Sur ubuntu de 10.04 à 12.04
sudo apt-get install qt4-qmake qt-creator build-essential libqt4-dev g++
Sur ubuntu 14.04 et suivantes
apt-get install libqt5webkit5-dev libqt5scripttools5 libqt5script5 qtscript5-dev libqt5svg5-dev qt4-linguist-tools libexiv2-dev devscripts qt5-qmake qtbase5-dev qtbase5-dev-tools libqt5xmlpatterns5-dev libqt5xmlpatterns5-private-dev libsignon-qt5-dev qt5-default libpolkit-qt-1-dev libqtmultimediakit1
Sur debian il se peut que le paquet qt-creator soit qtcreator (sans le tiret) la commande d'installation est alors
sudo apt-get install qt4-qmake qtcreator build-essential libqt4-dev g++
Avec une Fedora-Core 14
yum install qt-creator
(Puis lancer qt-creator et attendre parfois patiemment plusieurs minutes pendant l'indexation des exemples, de l'aide...).
Tester les exemples pour voir les possibilités impressionnantes !
Développer des logiciels du Terrier d'AbulEdu¶
- entete gpl: à ajouter dans tous vos fichiers de code source (.cpp au moins)
- harmonisations dans nos codes: Conventions de codage
- L'arborescence type d'une application en Qt (et autre)
- Ressources graphiques et lignes de conduite graphique et ergonomique
- Convergence des ressources en ligne
- Raccourcis "Ctrl"
- Lancement sélectif d'exercices avec AbulÉdu-Alacarte
- Normalisation des modules
Boîte à outils V1¶
Cette boite à outils en V1 est encore un peu expérimentale et est issue de la réunion de travail du 2-3-4 juillet 2011 ... et comme on monte d'un étage dans la qualité du développement, nous allons essayer de converger vers un plan de nommage AbulEduv1
Généralités
- BoiteAOutilsV1: le schéma "organisation générale"
- Organisation graphique V1: les explications et généralités concernant l'organisation graphique des logiciels
- Utilisation de l'assistant AbulEduApplicationV1 : un plugin de Qt-Creator qui a pour but de vous aider à créer le squelette de votre 1ere application AbulEdu
- Partager des variables avec différents .pri : utile lorsque deux projets partagent le même code source par exemple
Détails
- AbulEduApplicationV1; l'application
- Gestion des arguments personnalisables de son application
- AbulEduAproposV1 : une "boite à propos" contenant des informations et de l'aide autour du logiciel dans lequel elle est utilisée.
- AbulEduAudioV1 : Composant pour simplifier le multimédia
- AbulEduButtonListV1 : Un objet qui permet de faire des listes à thème
- AbulEduCameraV1 : une classe qui permet de capturer des images provenant d'une webcam.
- AbulEduCameraWidgetV1 : une classe pour afficher des images et aussi pour en sélectionner une zone
- AbulEduCommonStatesV1
- AbulEduConstantesV1; les constantes qu'on utilise ou qu'on se partage pour la boite à outils
- AbulEduEditeurPageAccueil : un logiciel permettant de créer de manière conviviale les fichiers de configuration des pages d'accueil des logiciels du Terrier.
- AbulEduEditeur : un assistant de création pour les éditeurs des logiciels "simples"
- AbulEduEtiquettesV1 : des étiquettes avec image et texte, dropables...
- AbulEduExerciceV1: les exercices
- AbulEduFileV1 : Pour créer des fichiers .abe unifiés entre toutes nos applications
- AbulEduFlatBoutonV1: les boutons plats de type widget (nécessaires pour AbulEduExerciceV1)
- AbulEduGraphicsEtiquetteV1 : Un QGraphicsItem avec une image, du texte et une "marque" (petite icone)
- AbulEduGraphicMenuV1 : Pour incruster un menu graphique sur la page d'accueil par exemple
- AbulEduHunspellV1 : Pour utiliser le correcteur orthographique Hunspell dans nos logiciels
- AbulEduIdentitesV1 : Pour gérer sa fiche d'identité
- AbulEduInstructionV1 : Pour utiliser ou réenregistrer des consignes
- AbulEduLabelV1 : des étiquettes gérées sous forme de liste d'éléments ordonnables par Drag & Drop ou avec des boutons...
- AbulEduLangV1 : Amélioration type V1 du principe de Développement multilingue
- AbulEduLoadingAnimationV1 : Un élément graphique intégrant un GIF animé permettant de faire patienter l'utilisateur.
- AbulEduLoggerV1 : Écrire des logs des applications
- AbulEduMediathequeGetV1 : pour se connecter sur la médiathèque ou l'entrepôt de données (data)
- AbulEduMessageBoxV1 : pour remplacer les qdialog pas belles (arnaud tm)
- AbulEduMenuFeuilleV1 : un menu graphique inventé pour tablette puis généralisé dans tous les utilitaires
- AbulEduMultiMediaV1 : Classes permettant la visualisation de document multimédia (images/vidéo, Texte, son)
- AbulEduNetworkAccessManagerV1
- AbulEduNumericLinearPadv1 : Un ligne personnalisable de boutons contenant essentiellement les chiffres et qui émet des Qt::Key quand on clique dessus
- AbulEduPageAccueilV1 : écran d'accueil redimensionnable et cliquable pour lancer les exercices
- AbulEduPicottsV1 : pour l'utilisation de la synthèse vocale dans les logiciels du terrier
- AbulEduQRCodeReaderV1 : permet de décoder des QR-Code ou des Code-Bar présents dans une image
- AbulEduSingletonV1 : Classe générique (template) pour l'instanciation unique d'objet
- AbulEduSplashScreenV1 : Pour créer des splash-screen au lancement des logiciels
- AbulEduSSOV1 : La gestion de l'authentification unique et centralisée
- AbulEduStackedWidgetV1 : Personnalisation du QStackedWidget
- AbulEduStateMachineV1
- AbulEduTeteV1 : Cette classe fournit un QHBoxlayout affichant n "têtes" pour l'évaluation des exercices
- AbulEduTextV1 : Une structure de données pour les textes avec des fonctions de découpe, de nettoyage
- AbulEduTexteV1 : Un widget d'édition de texte à ajouter aux logiciels qui en ont l'usage.
- AbulEduTutorialV1 : L'affichage de tutoriels vidéo
- AbulEduVirtualKeyboardV1 : Un clavier virtuel qui apparaît tout seul comme sur les tablettes
- AbulEduVisionneuseImageV1 : Un widget pour afficher des images et un peu plus ...
- AbulEduWidgetAssistantEtapesV1 : Un widget de "Fil d'Ariane"
- AbulEduSlideWidgetContainerV1 : Un widget contenant un QStackedWidget avec des animations de "slide" (AbulEduStackedWidgetV1)
- AbulEduDebugV1 : Remplace avec élégance AbulEduLoggerV1 -- Attention only Qt5 -- PAS ENCORE EN PROD -> #POC
- etc. (à venir)
- (obsolète) AbulEduDemoV1 une implémentation de AbulEduApplicationV1, AbulEduExerciceV1, AbulEduStateMachineV1, AbulEduCommonStatesV1, AbulEduFlatBoutonV1, ... remplacé par Utilisation de l'assistant AbulEduApplicationV1
Problèmes rencontrés¶
- Programmes multifenêtres chaque fois qu'un projet contiendra plusieurs .ui
- Héritage multiple quand on veut construire une nouvelle classe héritée de 2
- Nettoyer son arborescence avant de faire un commit
- Traduire les boutons des QDialogButtonBox si l'on ne fait rien, ils sont en Anglais
- Paramètres par défaut dans les constructeurs éviter d'écrire plusieurs constructeurs
- Ressources dans des répertoires relatifs
- Renommer un projet Qt si on souhaite changer de nom après avoir créé un projet
- Affichage des messages d'erreurs avec qDebug() et gestion du mode silencieux
- Normalisation des échanges entre l'application et le plugin de gestion des logs et paramétrages
- Passer un SLOT en paramètre d'une fonction ... c'est possible !
- Ouvrir un navigateur web a la sauce Qt: multi-plateforme
- Connexion MySQL pour l'accès à la base de données ...
- Affecter une icone à l'application
- Parcourir des sous-dossiers de façon récursive
- Menu dynamique et récursivité deux problèmes : créer des menus à la volée et parcourir des dossiers
- Utiliser des tests unitaires pour améliorer la qualité du code de nos logiciels
- Surcharger des méthodes en dérivant des classes existantes
- Rechercher rapidement dans une liste
- Redimensionnement application Qt Fixer la taille d'une application
- Création fichier/dossier temporaire unique Pour accéder au dossier temp de chaque OS et pallier à un soucis de sécurité (fichier/dossier codé en "dur")
- Centrer une fenêtre
- Affichage dynamique des étapes d'un éditeur
- Bouton croix de fenêtre
- Tests et Logs sous Windows Afin d'avoir des retours et des tests plus proche du cas utilisateur
- Générer automatiquement un dictionnaire de verbes
- Utiliser des QSharedPointer pour les objets partagés
- Gérer la modalité des fenêtres pour savoir qui passe au dessus de qui
- Redimensionner un QGraphicsSvgItem
- Getters par référence et non par valeur
- Lancement exécutable sur Windows avec gestion de demande des privilèges
- Enregistrer un pointer dans un QVariant
Utilisation de différents objets Qt¶
- QProcess pour lancer des commandes systèmes
- QMessageBox pour les boites de dialogue
- QFile pour les fichiers
- QPainter et QGraphics pour faire des dessins
- QAction pour faire des actions
- QtScript pour évaluer un calcul
- QGraphicsItems objets à afficher ou animer
- QEvent Gérer le survol de la souris sur les boutons et autres objets
- QSettings Créer des fichiers de configuration
- QTextCursor et ses petits frères QTextCharFormat pour gérer le texte dans un QTextEdit par exemple.
- QCoreApplication arguments Comment récupérer les paramètres passés en ligne de commande ?
Prise en main (hello world and co)¶
- hello world
- ifdef-windows-linux pour gérer des morceaux de codes différents windows/linux/osx
- disposerWidgets exemple1 : placer des Widgets dans une fenêtre
- dérivationQDialog exemple2 : créer une classe dérivée de QDialog
- boiteDialogueRapide exemple3 : créer une boite de dialogue par l'interface graphique
- boiteDialogueMultiforme exemple4 : créer une boite de dialogue extensible, nécessaire pour l'exemple suivant
- disposerWidgets avec QtCreator : refaire l'exemple 1 mais par l'interface graphique
- disposerWidgets avec Qt Creator : refaire l'exemple 1 mais totalement par l'interface graphique
- balbutiements calculMental : utilisation des premiers acquis dans l'optique d'un futur logiciel
- developpement multilingue : utilisation de qt linguist pour avoir des logiciels facile à traduire
- utiliser un plugin : utiliser des plugins dans une application Qt (généralités)
- créer un plugin : créer un plugin pour le rendre utilisable depuis plusieurs applications Qt
- tableaux à trois dimensions : créer et manipuler des tableaux à trois dimensions
- promouvoir un objet en un autre type d'objet personnalisé dans qt-creator
Bibliothèques complémentaires à Qt¶
- SFML pour gérer les formats audio compressés (et bien plus encore)
- phonon pour gérer des fichiers multimédia.
- SVox pico pour une synthèse vocale libre
- log4Qt pour gérer les logs systèmes (projet issu de log4j d'apache)
Boîte à outils V0¶
Cette boite à outils est obsolète, elle est désormais remplacée par la boite à outils V1 ...- Utilisation de abuleduexercicev0: Créer une application qui hérite de la classe AbulEduExerciceV0 pour qu'elle s'interface toute seule sur le plugin de communication avec le serveur
- Utilisation de abuledutetev0: Créer une tête de Tux modifiable, à choisir dans une liste d'appréciation de résultat "neutre bien passable mal"
- Utilisation de abuleduaproposv0: Créer automatiquement une entrée Aide dans le menu principal du logiciel et gestion de la fenêtre "Aide"
- Utilisation de abuleduboutonv0: Créer des zones cliquables plus évoluées que des simples boutons
- AbulEduSplashScreenV0 : Pour créer des splash-screen au lancement des logiciels
Différentes versions de Qt et Qtcreator¶
- Différences entre les versions 1.x et 2.x
- Installation Qt5 en particulier sur ubuntu 10.04 / AbulÉdu 11.08
- Installation Qt5.6 à partir de https://www.qt.io
Migration Qt version supérieure¶
- Qt5.1 > Qt5.6 Ce qu'il faut savoir (non exhaustif)
Liens utiles¶
- Apprendre C++ avec Qt-creator 2009-2010 : http://www.jlpys.fr/phpBB/QtC10/
- http://www.siteduzero.com/tutoriel-3-11240-introduction-a-qt.html
- http://qt.developpez.com/
- Un WikiBook Programmation C++ (débutant) : http://fr.wikibooks.org/wiki/Programmation_C%2B%2B_%28d%C3%A9butant%29/Introduction
- Explication sur le framework Graphic View Framework_Graphic_View
- Explication sur le framework State Machine Framework_State_Machine