Question

Je développe une application avec GTK et Glade. Mon impression est qu'il est pratique courante de créer une sous-classe de GtkWindow pour votre fenêtre principale, mais je suis coincé sur la façon dont je construire ma sous-classe à partir d'une définition GtkBuilder. Est-ce que quelqu'un sait comment?

Était-ce utile?

La solution

GtkWindow de Subclassing est plus fréquente dans les liaisons diverses linguistiques GTK qu'il est dans la plaine C. Vous ne mentionnez quelle langue que vous utilisez.

Cela dit, la façon dont je la sous-classe GtkWindow en C est de créer le contenu de la fenêtre dans la Clairière, mais pas la fenêtre elle-même. Dans Glade 3 (IIRC), vous pouvez faire un clic droit sur un widget dans la palette et choisissez « Ajouter widget comme toplevel » pour placer un widget non sans un conteneur de premier niveau.

Ensuite, écrivez votre code pour la sous-classe de GtkWindow, appelons-le MyAppWindow. Je ne vais pas entrer dans ce dans cette réponse car il y a beaucoup d'exemples dans la documentation GObject. Dans la fonction init (de my_app_window_init()) charger le fichier Glade, utilisez gtk_builder_get_object() pour obtenir un pointeur vers le widget externe dans le fichier Glade, et utiliser gtk_container_add() pour l'ajouter à la fenêtre que vous construisez. Ensuite, utilisez gtk_builder_connect_signals() comme vous le feriez normalement.

Vous devez définir toutes les propriétés de la fenêtre manuellement cette façon, puisque vous ne pouvez pas le faire en Glade, mais à part ça, je l'ai trouvé fonctionne très bien.

Autres conseils

il est pratique courante de sous-classe GtkWindow.

Je ne pense pas qu'il est possible de sous-classe toplevel créée à partir de la définition GtkBuilder.

GtkBuilder a besoin de connaître votre widget avant la création sous-classé.

Si vous voulez vraiment créer votre propre sous-classe de GtkWindow ptomato décrit les étapes de base bien. Il est également possible de créer des plugins pour Glade pour faire vos widgets personnalisés disponibles. Mais ce n'est pas très facile, et très probablement pas ce que vous voulez faire.

La plupart des applications utilisent uniquement des widgets standard sans sous-classement aucun d'entre eux. chargement ensuite un fichier avec Glade GtkBuilder (ou libglade) vous n'avez pas besoin d'avoir une classe spéciale pour votre GUI (comme dans certains autres outils RAD) à la place que vous venez obtenir un ensemble d'objets. L'API vous permet de les rechercher par nom (et la fenêtre est fondamentalement juste un d'entre eux). Une approche commune est de rechercher tous les widgets que vous allez interagir avec et de les stocker dans des variables globales lorsque le programme démarre. Ou si vous avez besoin de plusieurs instances de la fenêtre, vous pouvez créer une struct pour les stocker. Ou vous pouvez simplement recherche les widgets chaque fois que vous en avez besoin. Notez que l'ensemble des objets que vous obtenez est tout à fait dynamique. Vous pouvez par exemple déplacer les widgets entre les différentes fenêtres comme si vous avez créé l'interface graphique par programme.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top