GTK+ Traduction Française du Manuel de référence |
---|
Questions CommunesQuestions Communes — Trouver des réponses aux questions communes dans le manuel GTK+. |
Voici l' "index" du manuel de référence organisé par questions communes "comment je fais ...". Si vous n'êtes pas certain de savoir ou trouver une réponse à une question dans la documentation, cette liste est un bon départ.
1. General |
||||||||||
1.1. | Comment puis-je
commencer avec GTK+ ? Le site Web de GTK+ offre un tutoriel et un FAQ. Vous pourrez trouver sur le site de développeurs de GNOME encore plus de documentation allant des livres sur papier aux livres en ligne. Après l'étude de cette documentation vous devriez être correctement préparer pour revenir consulter le manuel de référence pour les détails. |
|||||||||
1.2. | Où puis-je trouver de l'aide au sujet de
GTK+, soumettre un rapport de bogue, ou faire une proposition de
dispositif ? Voir la documentation dans ce sujet. |
|||||||||
1.3. | Comment
passer d'une version de GTK+ à une autre ? Voir la liste des changements incompatibles de 1.2 à 2.0. Voir ausi, le guide du "portage" de GNOME 2.0 sur http://developer.gnome.org pour consulter quelques discussions détaillées aus sujet du portage de 1;2 à 2.0. Vous pouvez aussi trouver des informations utiles dans la documentation pour des widgets et des fonctions spécifiques. Si vous avez une question à laquelle ce manuel ne répond pas, ne vous génez pas pour poser cette question dans les listes d'adresses mails et s'il vous plaît enregistrez un rapport de bigue au sujet de la documentation. |
|||||||||
1.4. | Comment
la gestion de la
mémoire fonctionne dans GTK+ ? Dois-je libérer
les
données retournées par les fonctions ? Voir la documentation pour GObject et GtkObject . Pour GObject considérez particulièrement g_object_ref() et g_object_unref() . GtkObject est une
sous-classe de GObject aussi
les même points s'appliquent, sauf s'il a l'état
"flottant" (c'est expliqué dans la documentation). |
|||||||||
1.5. | Pourquoi mon programme perd de la mémoire,
si je
détruis un widget immédiatement après
l'avoir
créé ? Si GtkFoo n'est pas une fenêtre de niveau supérieur, alors
Pour l'obtenir, vous devez acquérir une référence pour le widget et abandonner la référence flottante (“ref and sink” dans le langage de GTK+) après l'avoir créé :
Quand vous voulez vous débarrassé du widget, vous devez appeler gtk_widget_destroy()
pour casser toutes les connexions internes du widget avant de de
supprimer votre référence :
Quand vous ajoutez immédiatement un widget à un container, il prend à son compte d'assumer la référence initiale flottante et vous n'avez pas besoin de vous soucier du compte de référence... appelez jusue gtk_widget_destroy()
pour vous débarrassé du widget. |
|||||||||
1.6. | Comment
dois-je utiliser GTK+ avec les threads (tâches
légères) ? Ceci est traîté dans la documentation des threads dans GDK . Voir aussi la documentation de GThread pour portable threading primitives. |
|||||||||
1.7. | Comment
puis-je internationaliser un programme GTK+ ? Beaucoup de personnes utilisent GNU gettext, qui a déjà été utilisé pour installer GLib. Sur un système UNIX ou Linus avec gettext installé, tapez info
gettext pour lire la documentation.La courte liste de contrôle sur la façon dont employer gettext est : appeler bindtextdomain()
ainsi
gettext peut trouver les fichiers contenant vos traductions dans le
domaine par défaut. Conventionellement , les gens
définissent des macros par commodité ainsi :
N_() (N pour no-op)
pour marquer une chaîne à traduire dans
un contexte qui ne
permet pas un appel de fonction gettext() comme
dans un tableau initialiseur. Vous pouvez éventuellement
avoir à appeler gettext() sur
une chaîne pour trouver réellement la
traduction. _() Les deux
marquent la chaîne pour la traduire et la traduisent
effectivement. (très
peu clair....à retraduire !)De nos jours, GLib fournit des macros communes dans le fichier header gi18n.h, ainsi vous
n'avez pas à les définir vous même,
vous devez juste inclure ce header.Le code utilisant ces macros ressemble à ceci :
Les bibliothèques utilisant gettext devraient utiliser dgettext() à la
place de gettext() ,
cela leur permet de sépcifier le domaine de traduction
chaque fois qu'elles demandent une traduction. Les
bibliothèques devraient aussi éviter d'appeler textdomain() ,
puisqu'elles spécifieront le domaine au lieux
d'utiliser le default.Pour dgettext()
le _() macro peut
être défini ainsi :
Encore, GLib vient avec le gi18n-lib.h,
vous protéger du trouble que pourrait
causer la définition des macros à la main. Les
macros de ce header prévoient que le domaine de traduction
soit spécifié dans la macro GETTEXT_PACKAGE. |
|||||||||
1.8. | Comment dois-je utiliser les caractères non-ASCII dans les programmes GTK+ ? GTK+ utilise Unicode (plus exactement UTF-8) pour tous les textes. UTF-8 encode chaque point de code Unicode comme une séqence de un à six bytes et possèdes pas mal de propriétés qui sont autant de bonne raisons de travailler avec du texte Unicode dans les programmes en C:
g_locale_to_utf8() et g_convert() .Le texte provenant de source externe ( par exemple des fichiers ou des données utilisateur), doit être converti vers UTF-8 avant d'être manipulé par GTK+. L'exemple qui suit écrit le contenu d'un fichier texte encodé en ISO-8859-1 to stdout :
Pour des chaînes textuelles dans le code source, il y a plusieurs alternatives pour manipuler un contenu non-ASCII :
Voici un exmple qui montre les trois approches pour utiliser le signe copyright © qui a un point code 169 en Unicode et en ISO-8859-1 et il est représenté dans UTF-8 par les deux bytes 194,169 :
|
1.9. |
Comment utiliser GTK+ avec C++? |
|||
Il y a deux façon d'approcher cela. Les fichiers header de GTK+ utilisent le sous-ensemble de C qui est aussi valide pour C++, aussi vous pouvez simplement utiliser L'API normal de GTK+ dans un programme C++. Vous pouvez également utiliser un "Raccourcis C++" comme gtkmm qui fournit un API natif pour C++. Quand vous utilisez directement GTK+, gardez à l'esprit que seules les fonctions peuvent être connectées aux signaux, et non les méthodes. Aussi vous aurez besoin d'utiliser des fonctions globales ou des fonctions de classe "static" pour les connexions des signaux. Une autre considération commune quand vous utilisez GTK+ directement, est que C++ ne convertira pas implicitement un entier en une énumération. This comes up when using bitfields; en C vous pouvez écrire le code suivant :
Tandis qu'en C++ vous devez écrire :
Cependant, il y a très peu de fonctions qui demande cet cast. |
||||
1.10. |
Comment dois-je utiliser GTK+ avec une autre langage que C ? |
|||
Voir la liste des liens de language sur http://www.gtk.org. |
||||
1.11. |
Comment puis-je charger une image ou une animation depuis un fichier ? |
|||
Pour charger un fichier image directement dans un widget d'affichage, utilisez Pour charger une fichier image ou animation de façon asynchrone (sans bloquage), utilisez GdkPixbufLoader. |
||||
1.12. |
Comment puis-je dessiner du texte ? |
|||
Pour dessiner une portion de texte, utilisez un afficheur de document Pango et
N'utilisez pas GdkFont et Voir aussi la section "Text Handling in GTK 2"( Manipulation de texte dans GTK2) de Portage des applications vers la plateforme GNOME 2.0 . |
||||
1.13. |
Comment puis-je mesurer la taille d'une portion de text ? |
|||
Pour obtenir la taille d'un protion de texte, utilisez le dispositif de Pango et
N'utilisez pas la fonction dépréciée Voir aussi la section "Text Handling in GTK 2"( Manipulation de texte dans GTK2) de Portage des applications vers la plateforme GNOME 2.0 . |
||||
1.14. |
Pourquoi les types ne sont pas enregistrés si j'utiliser leur macro |
|||
Les macros Un solution commune à ce problème est de placer le résultat dans une variable volatile, qui empêchera le compilateur d'optimiser l'appel (call away).
|
||||
1.15. |
Comment puis-je créer une fenêtre de niveau supérieur transparente ? |
|||
Pour rendre une fenêtre transparent, il afut utiliser un
visuel qui le supporte. C'est possible en obtenant la carte de couleur
RGBA de l'écran avec
Une possibilité pour remplir le canal alpha sur une fenêtre est d'utiliser gdk_draw_rgb_32_image() .
Notez que la présence d'un visuel RGBA ne
garantit pas que la fenêtre apparaisse transparente sur
l'écran. Sur X, cela requiert un compositing manager pour fonctionner. Voir |
||||
2. Quel widget dois-je utiliser... |
||||
2.1. |
...pour les listes et les arbres ? |
|||
Voir vue général des widgets arbre — vous devez utiliser le widget GtkTreeView . (Une liste est juste un arbre sans branche, aussi le widget arbre est utilisé également.) N'utilisez pas les widgets dépréciés GtkTree ou GtkCList/GtkCTree dans du code nouvellement écrit, ils sont moins flexibles et il en résulte un interface utilisateur inférieur. |
||||
2.2. |
...pour l'affichage ou l'édition de texte multi-lignes ? |
|||
Voir vue générale du widget texte — vous devez utiliser le widget GtkTextView . N'utilisez pas le widget déprécié GtkText dans un code nouvellement écrit, il y a un certain nombre de problèmes qu'il vaut mieux éviter. Si vous avez seulement une petite quandtité de texte, GtkLabel peut aussi être approprié bien sûr.
On peut le sélectionnable avec |
||||
2.3. |
...pour afficher une image ou une animation ? |
|||
GtkImage peut afficher des images seulement dans les format que GTK+ comprend. Vous pouvez aussi utiliser GtkDrawingArea si vous avez besoin de faire quelque chose de plus complexe, comme dessiner un texte ou un graphique par dessus l'image. |
||||
2.4. |
... pour présenter un ensemble de choix exclusifs mutuellement, où Windows utiliserait une combobox ? |
|||
Avec GTK+, un GtkComboBoxest le widget recommandé pour cet usage. Ce widget ressemble soit à une combobox ou à un menu d'option courant, cela dépend du theme courant. Si vous avez besoin d'une entrée d'éditeur de texte, utilisez GtkComboBoxEntry. |
||||
3. GtkWidget |
||||
3.1. |
Comment puis-je changer la couleur d'un widget ? |
|||
Voir Pour modifier la couleur de fond d'un widget comme GtkLabel qui n'a pas de fond, placez le dans un GtkEventBox et définissez la couleur de fond de event box (boîte d'événements). |
||||
3.2. |
Comment puis-je changer la police d'un widget ? |
|||
Il y a plusieurs réponses possibles, selon ce que vous voulez réaliser exactement. Une des options est
Si vous voulez faire modifier le texte d'un label, vous pouvez utiliser
C'est préférable pour beaucoup d'application
parce c'est une taille relative au choix de police de l'utilisateur.
Voir Vous pouvez aussi changer le type police d'un widget en plaçant :
dans un fichier ressource, en l'analysant avec |
||||
3.3. |
Comment dois-je faire pour désactiver/ How do I disable/transformer en fantôme/désensibiliser un widget? |
|||
Dans GTK+ un widget désactivé est dit "insensitive." Voir |
||||
4. GtkTextView |
||||
4.1. |
Comment puis-je obtenir le contenu d'un widget texte entier dans une chaîne ? |
|||
Voir
|
||||
4.2. |
Comment faire pour qu'un widget texte affiche entièrement son contenu avec une police spécifique ? |
|||
Si vous utilisez Pour s'assurer que tout le texte aura l'apparence souhaitée, utilisez |
||||
4.3. |
Comment faire en sorte qu'un visualiseur de texte glisse jusqu'à la fin du buffer automatiquement ? |
|||
Une bonne solution pour faire en sorte qu'un buffer de texte glisse à la fin, sera de placer une marque à la fin du buffer, et de lui donner la bonne "gravité". La gravité a pour effet d'inserrer le texte au niveau de la marque et avant elle, gardant ainsi la marque à la fin. Pour vous assurer que la fin du buffer reste visible, utilisez L'application gtk-demo contient un exemple de cette technique. |
||||
5. GtkTreeView |
||||
5.1. |
Comment associer des donées avec une ligne dans un arbre ? |
|||
Rappelez -vous que les colonnes de GtkTreeModel
ne doivent pas nécessairemement être
affcihées. Ainsi vous pouvez placer des données
utilisateurs non visibles dans votre modèle comme d'autre
données, et les retrouver avec |
||||
5.2. |
En quoi GtkTreeView
est équivalent à |
|||
Comme il n'y a pas de colonne de données séparée dans GtkTreeModel, il n'y a pas de construction dans la fonction pour trouver le iter des
données. Vous pouvez écrire une fonction spéciale
de recherche pour parcourir l'arbre et trouver les données, ou
utiliser gtk_tree_model_foreach() .) |
||||
5.3. |
Comment puis-je placer une image et un texte dans la même colonne ? |
|||
Vous pouvez placer plus d'un GtkCellRenderer dans un simple GtkTreeViewColumn en utilisant |
||||
5.4. |
Je peux définir des données facilement dans mes modèles GtkTreeStore/GtkListStore en utilisant |
|||
GtkTreeStore et GtkListStore appliquent l'interface GtkTreeModel.
Par conséquent, vous pouvez utiliser n'importe quelle fonction
que cette interface utilise.La façon la plus simple pour relire
l'ensemble des données est d'utiliser |
||||
5.5. |
Comment puis-je changer la manière dont les nombres sont formatés par GtkTreeView? |
|||
Utilisez L'exemple qui suit démontre cela :
|
||||
5.6. |
Comment puis-je cacher les flèches de développement dans mon visualiseur d'arbre ? |
|||
Définissez la propriété des colonne de
développement du visualiseur d'arbre à cacher la colonne.
Voir |
||||
6. Utiliser cairo avec GTK+ |
||||
6.1. |
Comment puis-je utiliser cairo pour dessiner dans les application GTK+ ? |
|||
Utilisez |
||||
6.2. |
J'ai créé un contexte cairo avec |
|||
Tous le dessin dans GTK+ est normalement fait dans un handler d'exposition, et GTK+ créé un pixmap (image 3D) temporaire pour utiliser le double buffering pour dessin. Si vous créez un contexte cairo en dehors du handler d'exposition, il sera soutenu par la fenêtre GDK elle-même, et non par le pixmap de double buffering. Par conséquent, tous les dessins que vous faites avec ce contexte cairo seront remplacés au final par le handler d'exposition, quand le pixmap de double buffering sera recopié. Solutions possibles à ce problème :
|
||||
6.3. |
Puis-je améliorer la performance de mon application en utilisant le backend de Glitz de Cairo ? |
|||
Non. Le backend GDK X11 utiliser le backend cairo X (et les autres backends utilisent leurs backends cairo natifs respectifs). Les développeurs de GTK+ pensent que la meilleure façon d'améliorer la performence graphique de GDK est d'optimiser le backend X de cairo et les chemins de code appropriés dans le serveur X qui est utilisé (particulièrement l'extension du rendu).(pas compris :) ) |
||||
6.4. |
Puis-je utiliser cairo pour dessiner dans un GdkPixbuf ? |
|||
Non, pas encore. La surface de l'image cairo ne supporte pas le format pixel utilisé par GdkPixbuf. |
[1]
Si le chargement de fichier échoue, gtk_image_new_from_file()
n'affichera pas d'image graphique — pour détecter une erreur pour un de vois propres chargements, utilisez gdk_pixbuf_new_from_file()
directement, puis gtk_image_new_from_pixbuf()
.