Frage

Ich bin eine Anwendung mit Gtk und Glade zu entwickeln. Mein Eindruck ist, dass es gängige Praxis, eine Unterklasse von GtkWindow für Ihre Hauptfenster zu schaffen, aber ich bin fest, wie ich meine Unterklasse von einer GtkBuilder Definition konstruieren würde. Wer weiß, wie?

War es hilfreich?

Lösung

GtkWindow Vererben ist häufiger in verschiedenen Sprachbindungen des GTK als es im Klar C. Sie ist nicht erwähnt, welche Sprache Sie verwendet haben.

sagte, dass die Art, wie ich Unterklasse GtkWindow in C ist der Inhalt des Fensters in Glade zu schaffen, aber nicht das Fenster selbst. In Glade 3 (IIRC) Sie können mit der rechten Maustaste auf ein Widget in der Palette und wählen Sie "Add-Widget als Toplevel" ein nicht-Toplevel-Widget ohne Container zu platzieren.

Dann schreiben Code für Ihre Unterklasse von GtkWindow, nennen wir es MyAppWindow. Ich will nicht in die in dieser Antwort gehen, da gibt es viele Beispiele in der GObject Dokumentation ist. In der init-Funktion (my_app_window_init()) lädt die Glade-Datei, verwendet gtk_builder_get_object() einen Zeiger auf das äußerste Widget in der Glade-Datei zu erhalten, und die Verwendung gtk_container_add() es zum Fenster hinzufügen Sie bauen. Dann nutzen Sie gtk_builder_connect_signals() wie gewohnt.

Sie haben alle das Fenster der Eigenschaften manuell auf diese Weise eingestellt, da man es nicht in Glade tun können, aber anders als das ich gefunden habe, funktioniert es ganz gut.

Andere Tipps

Es ist nicht üblich, Unterklasse GtkWindow.

Ich glaube nicht, ist es möglich, Unterklasse Toplevel-Fenster aus gtkbuilder Definition erstellt.

gtkbuilder Bedürfnisse über Ihre Unterklasse-Widget vor der Schöpfung kennen.

Wenn Sie wirklich Ihre eigene Unterklasse von GtkWindow ptomato erstellen möchten beschreibt die grundlegenden Schritte gut. Es ist auch möglich, Plugins erstellen für Glade Ihrer eigenen Widgets zur Verfügung zu stellen. Aber das ist nicht sehr einfach, und wahrscheinlich nicht das, was Sie tun mögen.

Die meisten Anwendungen verwenden nur Standard-Widgets ohne jede von ihnen Subklassen. Dann eine Glade-Datei mit gtkbuilder Laden (oder libglade) Sie keine Sonderklasse für Ihre GUI haben müssen (wie in einigen anderen RAD-Tool) stattdessen erhalten Sie nur eine Reihe von Objekten. Die API können Sie sehen sie mit Namen (und das Fenster ist im Grunde nur einer von ihnen). Ein gemeinsamer Ansatz ist es, alle Widgets zu suchen, mit denen Sie interagieren wollen und speichern sie in globalen Variablen, wenn das Programm startet. Oder, wenn Sie mehrere Instanzen des Fensters benötigen, können Sie eine Struktur erstellen speichern sie in. Oder Sie können einfach Lookup die Widgets jedes Mal, wenn Sie sie benötigen. Beachten Sie, dass die Menge der Objekte, die Sie erhalten vollständig dynamisch. Sie können zum Beispiel die Widgets zwischen verschiedenen Fenstern bewegen, als ob Sie die GUI programmatisch erstellt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top