2016-08-08 56 views
-1

Ich versuche, ein Beispiel für gtk+3 zu kompilieren und auszuführen, leider ist das Beispiel von gtk + 2 Handbuch, ich kann nichts nützliches auf gtk+3 finden und Ich kann gtk+2 nicht herunterladen. Am Beispiel gibt es ein paar Funktion wie folgt aus:'GtkToggleButton {aka struct _GtkTogglebutton}' hat kein Mitglied 'active'

void entry_toggle_editable(GtkWidget *checkbutton, 
GtkWidget *entry) 
{ 
    gtk_editable_set_editable(GTK_EDITABLE(entry),GTK_TOGGLE_BUTTON(checkbutton)->active); 
} 

Beim Kompilieren ich diesen Fehler habe:

'GtkToggleButton {aka struct _GtkToggleButton}' has no member named 'active' 

ich in allen Handbüchern aussah. Ich konnte finden, um das Problem zu umgehen, ich verstehe, dass es wahrscheinlich ein Release-Kompatibilitätsproblem ist, aber gtk+3 Handbücher sind wirklich nutzlos für jemanden, der sich zum ersten Mal Gtk nähert.

Antwort

0

Eine der größten Änderungen zwischen GTK + 2 und GTK + 3 ist, dass GTK + 3 alle öffentlichen Strukturfelder entfernt und durch GObject-Eigenschaften ersetzt. Also anstatt zu sagen

GTK_TOGGLE_BUTTON(checkbutton)->active 

Sie sagen

gboolean active; 
g_object_get(checkbutton, "active", &active, NULL); 

(Die NULL ist, weil g_object_get() mehrere Eigenschaften aus dem gleichen Objekt zur gleichen Zeit bekommen, die NULL sagt, „dass alles, was ich von diesem brauchen rufen“.)

GTK + bietet auch Accessormethoden Typprüfung hinzuzufügen, so dass Sie auch

gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(checkbutton)) 
sagen kann,

Wenn diese verfügbar sind, ist es besser, direkt g_object_get() aufzurufen.

Die GTK + Dokumentation wird mit a tutorial geliefert. Wie Sie wahrscheinlich bemerkt haben, können Sie GTK + 2-Beispiele nicht verwenden, um GTK + 3 ohne Änderung zu lernen. Sie werden mehr Zeit benötigen, um GTK + 3-Beispiele zu finden.