La certification Advanced Widget UI Curriculum

Jonathan Courtois

La certification Advanced Widget UI fait partie de la liste des nouvelles certifications avancées que Nokia vient d'ouvrir en version bêta pour les Qt Dev Days 2010. Elle ne sera disponible au grand public que début 2011. Elle permet de tester l'une des parties la plus ancienne historiquement chez Qt, à savoir la programmation d'interfaces graphiques. Elle comprend la manipulation de widgets mais également des sujets plus avancés comme l'architecture modèle/vue, les widgets personnalisés et le multi-threading. Cette page présente son contenu.
Commentez

- Titre : La certification Advanced Widget UI Curriculum

- Auteur : Jonathan Courtois

- Parution : 7 octobre 2010

- Licence : Copyright ® 2010 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Modèle/vue

- I-A. Objectifs

- I-B. Liens utiles

- II. Programmation multi-thread en Qt

- II-A. Objectifs

- II-B. Liens utiles

- III. Traitement de texte riche

- III-A. Objectifs

- III-B. Liens utiles

- IV. Gestion de projets Qt (développement/tests unitaires/portabilité/licences)

- IV-A. Objectifs

- IV-B. Liens utiles

- V. Création de plug-ins

- V-A. Objectifs

- V-B. Liens utiles

- VI. Glisser/Déposer et l'accès au presse-papiers

- VI-A. Objectifs

- VI-B. Liens utiles

- VII. Widgets personnalisés

- VII-A. Objectifs

- VII-B. Liens utiles

- VIII. Styler les widgets

- VIII-A. Objectifs

- VIII-B. Liens utiles

- IX. Rendre ces applications scriptables

- IX-A. Objectifs

- IX-B. Liens utiles

- X. Écrire du code pour une traduction efficace

- X-A. Objectifs

- X-B. Liens utiles

- XI. Utilisation du framework Undo (retour en arrière)

- XI-A. Objectifs

- XI-B. Liens utiles

I - Modèle/vue

I-A - Objectifs

- Connaître le but de la programmation modèle/vue.

- Savoir comment une vue communique avec le modèle.

- Savoir ce que les widgets de Qt fournissent pour afficher les données du modèle.

- Être capable d'utiliser des modèles prédéfinis de Qt.

- Savoir comment passer une vue de cellule de lecture seule à lecture/écriture.

- Savoir pourquoi une vue appelle un modèle plusieurs fois pour afficher une seule cellule.

- Savoir comment trouver un élément spécifique dans un modèle.

- Savoir comment ajouter une ligne à une table.

- Savoir comment utiliser la sélection.

- Savoir comment la vue reconnaît les changements qui ont été apportés aux données du modèle.

- Savoir quel est le but d'un délégué et comment il peut être utilisé.

- Être capable de trier et filtrer les données d'un tableau.

I-B - Liens utiles

- Model View

- Qt Quarterly : trier des QListViews

- Documentation : la programmation modèle/vue

- Chapitre 3 à 6 : Advanced Qt Programming

II - Programmation multi-thread en Qt

II-A - Objectifs

- Être capable de démarrer un nouveau thread avec QThread.

- Savoir comment envoyer des messages vers un autre thread.

- Savoir ce que signifie pour une méthode ou une classe d'être thread-safe ou réentrant.

- Savoir se servir d'un mutex.

- Savoir se servir d'un sémaphore.

- Savoir ce que signifie l'affinité des threads pour les QObject.

- Savoir quand un thread a besoin d'une boucle d'événements.

- Savoir que l'on peut utiliser des threads de l'API native et des QThread en parallèle.

- Savoir pourquoi les connexions en attente sont utiles lorsque vous travaillez avec des threads.

- Savoir quel est le but des fonctions du module QtConcurrent et comment elles peuvent être utilisées.

II-B - Liens utiles

- Thread

- Documentation : le support des threads avec Qt

- Documentation : la classe QThread

- Qt Labs : vous vous y prenez mal...

- Qt Labs : les threads sans maux de tête

- Qt Quarterly : implémenter un mutex en lecture et en écriture

- Partie III, chapitre 2 : Qt 4 et C++

- Chapitre 7 et 8 : Advanced Qt Programming

III - Traitement de texte riche

III-A - Objectifs

- Être familiarisé avec QTextDocument, la classe de Qt pour représenter du texte formaté.

- Être capable d'afficher du texte formaté à l'aide de QTextEdit.

- Savoir comment QTextFrame, QTextBlock et QTextFragment peuvent être utilisés pour construire une hiérarchie de texte formaté.

- Être capable de construire, modifier et exporter du texte formaté.

III-B - Liens utiles

- Comment manipuler du texte sélectionné avec QTextCursor ?

- Documentation : traitement de texte riche

- Chapitre 9 et 10 : Advanced Qt Programming

IV - Gestion de projets Qt (développement/tests unitaires/portabilité/licences)

IV-A - Objectifs

- GPL, LGPL ou Commercial : quelle licence choisir ?

- Savoir comment écrire et compiler un test unitaire basique.

- Savoir que Qt peut être utilisé avec d'autres bibliothèques telles que STL, boost et ACE.

- Savoir organiser l'arbre de code source pour un gros projet.

IV-B - Liens utiles

- Quelle est la licence d'utilisation de Qt 4 ?

- Les bibliothèques complémentaires

- Introduction au module QtTest

- Qt Quarterly : bibliothèques et plug-ins

- TV Qt : faire son choix - LGPL ou commercial

V - Création de plug-ins

V-A - Objectifs

- Savoir que les fonctionnalités de Qt peuvent être étendues par l'ajout d'extensions.

- Être capable de charger une bibliothèque dynamique avec QLibrary.

- Savoir charger un plug-in existant.

- Savoir créer un plug-in.

V-B - Liens utiles

- Plug-ins

- Documentation : comment créer des plug-ins Qt

- Partie III, chapitre 3 : Qt 4 et C++

VI - Glisser/Déposer et l'accès au presse-papiers

VI-A - Objectifs

- Connaître les gestionnaires d'événements pertinents pour une opération de glisser-déposer.

- Être en mesure d'accepter des données venant d'une application externe.

- Être capable de faire un glisser/déposer de données entre deux widgets.

- Savoir identifier de quel widget les données déposées viennent.

- Être capable de faire un glisser/déposer de types de données personnalisés.

- Savoir comment permettre le glisser/déposer pour les éléments d'une vue.

- Être en mesure d'accéder aux données stockées dans le presse-papiers.

- Être capable de placer des données dans le presse-papiers.

VI-B - Liens utiles

- Comment faire un glisser-déposer ?

- Documentation : glisser et déposer

- Partie II, chapitre 4 : Qt 4 et C++

VII - Widgets personnalisés

VII-A - Objectifs

- Être capable de développer un widget personnalisé peint.

- Savoir comment les widgets peints peuvent prendre en compte les styles.

- Être capable de concevoir un widget personnalisé de différentes manières : agrégation, sous-classe, peinture personnalisée.

VII-B - Liens utiles

- Comment dessiner dans un QWidget ?

- Création d'une fenêtre personnalisée

- Qt Quarterly : widgets translucides dans Qt

- Documentation : utiliser des widgets personnalisés avec Qt Designer

- TV Qt : dans les profondeurs de QWidget

- Partie I, chapitre 5 : Qt 4 et C++

VIII - Styler les widgets

VIII-A - Objectifs

- Savoir définir une feuille de style.

- Être en mesure de spécifier un sélecteur pour un widget spécifique.

- Être capable de définir des attributs de styles différents comme l'arrière-plan du texte, les marges internes et les bordures.

- Être capable d'utiliser le designer pour le développement avec feuille de style.

- Être capable de définir un style avec un argument de ligne de commande.

- Connaître comment QStyle doit être utilisé dans le corps du paintEvent() pour recevoir le style des widgets compatibles.

- Savoir quel est le but de QStyleOption.

VIII-B - Liens utiles

- Style

- Qt Quarterly : des apparences personnalisées utilisant les feuilles de style

- Documentation : les feuilles de styles

IX - Rendre ces applications scriptables

IX-A - Objectifs

- Savoir que Qt Script est basé sur ECMA script, une version standardisée de JavaScript.

- Savoir que QScriptEngine est la classe qui est capable de charger et d'exécuter Qt Script.

- Savoir que QScriptValue est un type de variant accessible à partir de C++ et de Qt Script.

- Être capable de rendre une valeur d'un programme C++ personnalisé accessible à Qt Script.

- Savoir appeler des fonctions Qt Script à partir du C++ et comment passer des paramètres.

- Savoir exposer un QObject ou un dérivé à Qt Script.

- Savoir réaliser une connexion d'un signal à une fonction Qt Script.

- Savoir détecter et gérer les erreurs de Qt Script.

- Savoir vérifier les erreurs de scripts.

IX-B - Liens utiles

- Ajouter des scripts à votre application Qt

- Documentation : rendre ces applications scriptables

- TV Qt : scripter vos applications Qt

X - Écrire du code pour une traduction efficace

X-A - Objectifs

- Savoir comment un texte constant contenant des caractères chinois peut être lu dans une QString.

- Savoir comment envelopper les chaînes de caractères qui doivent être traduites.

- Être capable d'extraire les chaînes de caractères à traduire à partir d'un projet Qt.

- Savoir prendre l'encodage du fichier source en compte.

- Savoir utiliser Linguist pour traduire les chaînes de caractères extraites.

- Être capable de sauvegarder les chaînes de caractères traduites dans un fichier qm.

- Savoir comment QT_NO_CAST_FROM_ASCII peut être utilisé pour trouver toutes les constantes de chaînes de caractères qui ne sont pas traduites.

- Savoir utiliser des icônes de paramètres régionaux spécifiques.

X-B - Liens utiles

- Problèmes de traduction ?

- Qt Quarterly : un tr() oublié ?

- Qt Quarterly : FAQ sur l'internationalisation

- Qt Quarterly : les formes du pluriel dans les traductions

- Qt Quarterly : traduction dynamique

- TV Qt : la traduction d'applications avec Qt

- Documentation : l'internationalisation

- Partie III, chapitre 1 : Qt 4 et C++

XI - Utilisation du framework Undo (retour en arrière)

XI-A - Objectifs

- Connaître l'architecture du framework Undo de Qt.

- Savoir comment combiner des commandes avec la compression et les macros

XI-B - Liens utiles

- Qt Quarterly : utilisation d'Undo/Redo avec les vues

- Documentation : vue d'ensemble du framework Undo