Aller au menu - Aller au contenu

Icône Trucs et astuces divers

Avatar
Avatar
Avatar
Avatar
Mise à jour : 12/07/2009
1 945 visites depuis 7 jours, dont 73 sur ce chapitre classé 71/786
Ce chapitre contient diverses astuces qui pourraient bien vous servir, et ce quel que soit votre niveau/avancement.

N'hésitez pas à venir jeter un coup d'oeil de temps en temps ! ;)
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire

Quelques Macros...

Les conventions de GTK disent que chaque widget doit posséder trois macros (minimum) permettant de manipuler les Widgets :
  • GTK_WIDGET(widget) : Permet de caster (transformer) un widget en son type réel.
    Par exemple, pour modifier les paramètres d'une fenêtre, vous devez passer aux fonctions un GtkWindow et non un GtkWidget, ce qui se fait donc avec la macro GTK_WINDOW.
  • GTK_WIDGET_CLASS(widget) : Même chose, sauf qu'on obtient un GtkWidgetClass*.
    Utile lors du développement de widgets, mais pas (ou trés peu) utilisé par l'utilisateur (vous).
  • GTK_IS_WIDGET(widget) : Permet de savoir si un widget est de type GtkWidget.
    Renvoie "vrai" si le widget et bien du type précisé.

* WIDGET : Quand Widget est écrit ainsi, cela signifie que le mot est à remplacer par le type voulu.
Ex : pour les GtkWindow, les macros sont :

Code : C
1
2
3
#define GTK_WINDOW ...
#define GTK_WINDOW_CLASS ...
#define GTK_IS_WINDOW ...

Rien de bien passionnant je vous l'avoue, mais vous devez connaître l'existence de ces macros, ou tout au moins la première ! :)

Astuce par Guimers8

Retour à la console

Apprenez chers amis, que lors du développement d'une vraie application GTK, ou même d'un simple petit programme, la console peut se révéler utile. Je vous conseille très fortement d'activer la console pendant le développement (on l'enlève pour la distribution ;) ), car elle permet d'afficher différentes choses telles que :
  • En cas d'erreur d'installation d'un composant, mais qui ne gène pas la compilation, vous pouvez avoir des erreurs qui apparaissent.
  • En cas d'erreur d'utilisation des certains widgets, vous pouvez voir des Warnings. Très utile !
  • Pour faire du débug, par exemple pour afficher simplement un retour de fonction (pour faire des tests).
Ces trois raisons sont largement suffisantes ! Quand vous avez un problème, ne posez pas de questions sur le forum avant d'avoir vérifié qu'il n'y a pas d'erreurs !

Astuce par Guimers8

Problèmes d'encodage UTF-8

GTK+ utilise l'encodage UTF-8 pour le traitement et l'affichage des chaines de caractères, ce qui peut poser problème et gêner l'affichage des les caractères spéciaux et des accents. On aura alors une erreur de ce type dans la console :

Code : Console
** (programme.exe) : WARNING **: Invalid UTF8 string passed to pango_layout_set_text()


La solution qui permet de remédier à ce problème est simple, il suffit de convertir la chaine en question en UTF-8, comme vous l'avez vu dans le chapitre sur les labels :

Code : C
1
2
3
4
5
6
7
8
#define UTF8(string) g_locale_to_utf8(string, -1, NULL, NULL, NULL)

/* encodage */
gchar *chaine = UTF8("Un texte accentué, avec des caractères bizarres... $23, 32?, £18...");
/* utilisation de la chaine */
<...>
/* libération de la chaine allouée */
g_free(chaine);

Cependant, il est tout de même assez lourd de devoir passer par un encodage, puis de libérer la mémoire après utilisation… Alors qu'il y a bien plus simple !


Pourquoi ce problème ?



Nous avons un conflit d'encodage entre les chaines traitées par GTK+ (UTF-8), et celles que vous tapez dans votre IDE (ISO-38547 ou autre…). Conclusion : votre éditeur n'utilise pas le même encodage que GTK+.


Comment le résoudre ?



Pour résoudre le problème, il faudrait que votre éditeur, et donc vos fichiers sources, utilisent l'encodage UTF-8. Voici comment faire :

Sous Linux : il est très probable que vos fichiers soient déjà encodés en UTF8, ainsi pas de problème. Si ce n'est pas le cas, vous pouvez généralement régler cela dans le préférences de votre éditeur. Pour info, Code::Blocks utilise l'UTF-8 par défaut.

Sous Windows : sur cet OS, le problème est systématique. Soit vous choisissez d'utiliser un éditeur externe dont on peut choisir l'encodage, soit vous utilisez les nightly builds de Code::Blocks.

Sous Mac OS : XCode vous permet de choisir l'encodage (menu Format > File encoding > Unicode UTF8). Si vous utilisez un éditeur externe, comme Smultron, vous pourrez également utiliser l'encodage de votre choix. ;)


C'est tout ?



Oui. :) Réenregistrez vos fichiers avec le nouvel encodage, puis compilez : comme par magie, plus besoin de convertir vos chaines !
Merci qui ?

Astuce par Guimers8

Texte accentué

Dans le chapitre sur les labels, vous avez appris que GTK utilisait l'encodage UTF-8, mais que ce n'etait pas forcement votre encodage local et qu'il fallait donc convertir les chaines accentuées. Cela ne concerne pas que les labels mais tout les textes que GTK est succeptible d'afficher. (titre de fenêtre, boutons, etc...)

Vous découvrez donc une petite fonction permettant de convertir une chaine en UTF-8 :

Code : C
1
gchar* g_locale_to_utf8 (const gchar *opsysstring, gssize len, gsize *bytes_read, gsize *bytes_written, GError **error);

La plupart du temps, on ne se sert que du premier paramètre; et comme cette fonction est très longue, je vous propose d'ecrire une petite macro qui fera la convertion mais qui prendra moins de place. La voilà :

Code : C
1
#define UTF8(string) g_locale_to_utf8(string, -1, NULL, NULL, NULL)

Ca sera plus pratique à utiliser comme ça ! Cependant, n'oubliez pas de libérer la mémoire lorsque c'est nécéssaire ! ;)

C'est une petite astuce toute bète, que vous pouvez appliquer pour d'autre fonctions longues ! ^^

Astuce par Guimers8
Il n'y a pas de QCM, cela ne servirait à rien, vous n'avez réellement rien appris ! ^^

Puissent ces astuces vous servir !
Chapitre précédent Sommaire

Partager

4 commentaires pour "Trucs et astuces divers"
Note moyenne : 3.14 / 4 (29 votes)
Pseudo Commentaire
Hors ligne Naspter # Posté le 25/03/2007 à 19:32:41
Avatar

Études : EFREI

Pourquoi est ce que ce n'est pas dans la catégorie des Big Tutos ?? :euh:

Vraiment Super !!! bravoo a toi et a vous tous !!!
Hors ligne JRG Soft # Posté le 25/03/2007 à 22:10:56
We love GTK+
Avatar

[guimers8]

Il n'y a pas de catégorie Bigtuto/Minituto mais une séparation des tutos officiels (parMatéo21) et des tutos des zér0s.
Merci. :)
 
Hors ligne Keiristos # Posté le 07/06/2007 à 20:25:10
From Eternity to dream.
Avatar

Études : Ensimag

J'attends la suite avec impatience... (Vite, vite, viiiiiiiiiiiiiiiiiiite ! :p ).

Ubuntu - C (GTK+)

Final Irony X
La parodie audio de Final Fantasy X
 
Hors ligne anonyme # Posté le 01/09/2007 à 10:04:34

Bon tuto dans l'ensemble.

Voir tous les commentaires