Gibt es eine Möglichkeit, die Gtk-Bibliothek in C zu verwenden, um beispielsweise eine Gtk-Schaltfläche zu klonen und an anderer Stelle in der App zu packen. Ich weiß, dass du das gleiche Widget nicht zweimal packen kannst. Und dass dieser Code würde natürlich nicht funktionieren, aber zeigt, was passiert, wenn ich eine flache Kopie des Knopfes versuchen:Gibt es eine gute Möglichkeit, ein Gtk-Widget zu kopieren?
GtkButton *a = g_object_new(GTK_TYPE_BUTTON, "label", "o_0", NULL);
GtkButton *b = g_memdup(a, sizeof *a);
gtk_box_pack_start_defaults(GTK_BOX(vbox), GTK_WIDGET(b));
Es gibt Code umgeben, die eine vbox erstellt und packt es in einem Fenster und läuft gtk_main() . Dies wird in diesen harten führt Fehlermeldungen zu verstehen:
(main:6044): Gtk-CRITICAL **: gtk_widget_hide: assertion `GTK_IS_WIDGET (widget)' failed
(main:6044): Gtk-CRITICAL **: gtk_widget_realize: assertion `GTK_WIDGET_ANCHORED (widget) || GTK_IS_INVISIBLE (widget)' failed
**
Gtk:ERROR:/build/buildd/gtk+2.0-2.18.3/gtk/gtkwidget.c:8431:gtk_widget_real_map: assertion failed: (GTK_WIDGET_REALIZED (widget))
In der gleichen Richtung, wenn ich meine eigene GObject (nicht unbedingt ein GTK widget) zu schreiben, gibt es eine gute Möglichkeit, eine Kopie Konstruktor zu schreiben. Ich denke, es sollte eine Schnittstelle mit optionalen Hooks sein und hauptsächlich auf den Eigenschaften basieren und die Hierarchie der Klasse in irgendeiner Weise behandeln.
Ich würde dies tun wollen:
GtkButton *b = copyable_copy(COPYABLE(a));
Wenn GtkButton eine theoretische kopierbar Schnittstelle nutzen könnten.
Sie könnten eine GObject-Schnittstelle erstellen, die das "kopierfähige" Ding macht, indem Sie die Hooks und so weitergibt ... Ich würde es aber nicht schreiben wollen, es würde wahrscheinlich schwierig werden ... – Spudd86