Le processus de génération de la librairie semblant maintenant être, sinon maîtrisé à fond, au moins reproductible (j’ai en effet recommencé x fois de manière à tester les différentes options d’optimisation), on essaye l’étape suivante.
Nos objectifs
L’objectif de départ étant d’utiliser la Mini2440 comme panneau de contrôle de démonstrateurs ou comme super-télécommande domotique, il est nécessaire de pouvoir faire usage des widgets que Qt propose à cet effet.En effet, pas question de faire des panneaux de contrôle avec des boutons et affichages tout juste bons pour des applications de gestion. Beuah, pas bô :)
Ces widgets spécifiques ont tous pour caractéristique d’avoir une esthétique très réaliste et très soignée, y compris avec les reflets sur les cadrans des indicateurs, ainsi qu’un superbe rendu du fait qu’ils soient vectoriels.
L’objectif est donc d’arriver à les mettre en oeuvre, et donc dans un premier temps de faire tourner les applications de démonstration fournies [1] .
Récupération des sources
Les sources et la documentation des widgets et des démos sont disponibles ici : http://qt.nokia.com/developer/files....
On y trouve :
des indicateurs analogiques de différents styles
des sliders
des boutons, dont certains très sophistiqués
des graphes dynamiques
deux applications de démonstration : catalog qui comme son nom l’indique montre tous les widgets disponibles de manière dynamique, et patioencare qui est une petite application figurant un monitoring médical.
Mode opératoire
Grâce à l’expérience ( !) que je commence à accumuler sur le sujet, tout cela s’est passé sans douleur et assez rapidement.
La première chose à faire est de générer le makefile à partir du fichier projet de Qt. Si vous avez installé QtCreator pas besoin de s’en occuper manuellement, car cela fait partie du processus de build automatique. Mais je n’ai pas (encore) investigué dans cette direction et donc les étapes sont manuelles. Ce n’est pas plus mal, au moins on comprend ce qui se passe en coulisse.
Le makefile est produit à partir du fichier projet (*.pro) grâce à la commande qmake de Qt. C’est donc juste l’affaire de lancer la commande qmake qui se trouve dans le répertoire bin de Qt embedded. Cette commande fait partie de tout le lot d’outils host produit par la construction de la librairie Qt, détaillée dans l’article précédent de cette rubrique.
Quand elle est lancée sans argument, qmake essaye d’intuiter quoi faire. S’il n’y a pas de fichier projet présent dans le répertoire, elle va essayer d’en produire un sur la base des fichiers sources qu’elle reconnaît localement (c’est le mode "project"). S’il y a un fichier projet au moins, elle prend le premier et génère le makefile correspondant (c’est le mode "makefile"). Pour plus de détails, allez faire un tour sur le site Qt, la documentation y est de tout premier choix, ou commencez par qmake —help.
Une fois le makefile généré, il n’y a plus qu’à lancer la commande make.
Encore une fois, vérifiez bien avant toutes ces opérations que le répertoire des binaires du compilateur arm-gcc est bien dans le PATH, sinon vous serez vite rappelés à l’ordre.
Pensez également à utiliser l’option -j de make si vous avez une machine multi-core, car ça ira plus vite.
Une fois la compilation terminée, les binaires résultants des deux applications de démonstration sont dans les sous-répertoires examples/catalog et exemples/patientcare.
Il ne reste plus qu’à copier celui de votre choix sur le Mini2440 et c’est tout.
La démo
Pour lancer la démo, n’oubliez pas d’ajouter l’option -qws sur la ligne de commande afin que Qt utilise le serveur inclus. Vous pouvez toujours modifier le source ensuite pour initialiser l’application comme indiqué dans l’article précédent, et vous dispenser ensuite de cette option. Je suppose que le code fourni n’utilise pas cette méthode afin que les sources soient valables en environnement X11 également.
Euh, c’est vraiment tout ?
En fait, pas tout à fait si vous n’avez généré que le set minimal de bibliothèques Qt, car nous avons ici besoin de libQtSvg qui gère... le SVG (tous les graphismes sont vectoriels comme mentionné précédemment, y compris les images des widgets - parcourez les répertoires sources pour le vérifier). Une fois en possession de cette bibliothèque, copiez-là avec ses copines sur la carte.
C’est vraiment vraiment tout ?
Pas forcément.
Lorsque j’ai lancé la première fois la démo, les textes étaient minuscules. En fouillant sur le Web, j’ai trouvé que cela était causé parce Qt ne savait pas faire la mise à l’échelle car ne connaissant pas les dimensions du device [2].
Les choses rentrent dans l’ordre en ajoutant les lignes suivants dans le fichier /etc/qt4-env que je suggérais de créer précédemment.
export QWS_DISPLAY="LinuxFb:mmWidth=160:mmHeight=100"
export QWS_SIZE=800x480
Attention, le paramétrage ci-dessus est configuré à mon écran (version 7") et doit donc être adapté si le vôtre n’a pas les mêmes dimensions.
Une fois cela fait, et les paramètres pris en compte en exécutant . /etc/qt4-env les affichages seront corrects.
Les preuves en images
Et pour vous prouver que je ne bluffe pas, quelques photos de l’écran de la carte.
Pour information, sachez que les différents types d’indicateurs ou de boutons ne sont pas des widgets différents, mais le même widget avec des skins différents. C’est un concept assez puissant et souple offert par Qt sur l’ensemble de ses objets graphiques. Reportez-vous à la documentation et aux exemples pour plus de détails sur le sujet.
A bientôt pour de nouvelles aventures ;)
[1] contrairement aux différents modules de Qt, il n’y a pas ici de bibliothèque, mais simplement une collection de classes
[2] ça m’étonne un peu, car ma première application de test affiche les dimensions détectées, et tout était correct. Peut-être cela provient-il de la manière dont la démo catalog est codée. A voir plus tard...