Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les tutoriels > Non-Officiels > Programmation > Interface Graphique > Créez une interface avec GTK+ ! > Annexes > Trucs et astuces divers > Lecture du tutoriel

Trucs et astuces divers

Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Avatar
Auteurs : JRG Soft et Picxime
Note : 18 / 20 (3 votes)
Visualisations : 7 084

Plus d'informations Plus d'informations
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
Sommaire

Quelques Macros...

Les conventions de GTK disent que chaque widget doit posséder trois macros (minimum) permettant de manipuler les Widgets :

* 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 :
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 !
Sommaire
Retour en haut Retour en haut


Créé : le 02/10/2006 à 20:40:11
Modifié : le 22/08/2008 à 15:50:40
Avancement : 100%
Licence : Creative Commons BY-SA

4 commentaires

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 135 Zéros connectés | Requêtes SQL 8 requêtes | Temps de génération de la page : Total (SQL) 0.0487s (0.0223s)