Club robotique de Sophia-Antipolis

Accueil > POBOTpedia > Ordinateurs embarqués (SBC) > La Mini2440 de FriendlyARM > Qt embedded : on avance

Qt embedded : on avance

dimanche 14 novembre 2010, par Eric P.

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, la commande 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.

Différents indicateurs analogiques
Notez le reflet sur la vitre des indicateurs
Les mêmes sans la vitre avant
La "vitre" est en fait l’overlay
Des boutons
Des sliders
Des boutons et des sliders plus sophistiqués
La démo "patientcare"

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 ;)


[1contrairement 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...

Vos commentaires

  • Le 18 janvier 2011 à 11:09, par lgm42 En réponse à : Qt embedded : on avance

    Merci bcp pour toutes ces infos !!!
    Juste une question pour les contrôles QT skinnés, vous avez pris quoi et ou car ils sont vraiment magnifiques.
    Par avance merci

    • Le 19 janvier 2011 à 09:42, par Eric P. En réponse à : Qt embedded : on avance

      Rendons à César ce qui est à César : je n’ai rien fait de particulier, sinon de compiler la démonstration disponible avec les sources des ces widgets.

      Comment ça marche sous le capot

      Ces démos utilisent des images SVG pour les éléments visuels. Par exemple, le reflet sur la "vitre" n’est qu’une image utilisée en overlay grâce à la prise en compte de la transparence. L’ensemble des widgets est ainsi constitué de plusieurs couches graphiques (le fond avec l’échelle, l’aiguille, la vitre,...) superposées, et le positionnement de l’aiguille est obtenu par simple rotation de la couche correspondante (ce qui n’empêche pas d’utiliser une autre technique, comme la redessiner en temps réel via les primitives graphiques).

      Cette approche, qu’on trouve aussi pour des contrôles plus "classiques" (boutons, scroller,...) permet de gérer facilement les skins, car la modification de l’apparence est obtenue par simple changement de la série d’images utilisées, pour autant que les caractéristiques "mécaniques" (par ex. centre de rotation de l’aiguille, dimensions,...) restent identiques. Ce changement peut même être fait à l’exécution si on le souhaite.

      Tous les fichiers graphiques sont inclus dans les sources des démos. Il faut reconnaître en tout cas que les développeurs de ces widgets sont de très bon graphistes, car le look des divers contrôles est criant de réalisme.

      Cordialement

      Eric

    Répondre à ce message

Un message, un commentaire ?

modération a priori

Attention, votre message n’apparaîtra qu’après avoir été relu et approuvé.

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.