有沒有辦法,使用C中的Gtk庫來克隆Gtk按鈕(例如),並將它打包到應用程序中的其他位置。我知道你無法將相同的部件打包兩次。而這段代碼顯然是行不通的,但顯示當我嘗試按鈕的淺表副本會發生什麼:有沒有好的方法來複制一個Gtk小部件?
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));
有圍繞它創建了一個縱向盒和包裝它在一個窗口中,並運行進入主循環代碼() 。這將導致這些難以理解的錯誤消息:
(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))
按照同樣的思路,如果我寫我自己的GObject(不一定是一個GTK控件),有沒有寫一個拷貝構造函數的好方法。我認爲它應該是一個帶有可選鉤子的接口,並且主要基於屬性,以某種方式處理類的層次結構。
我想這樣做:
GtkButton *b = copyable_copy(COPYABLE(a));
如果GtkButton上可以使用的理論可複製的接口。
你可以創建一個GObject接口,通過提供鉤子和東西來完成'可複製'的事情...我不想寫它,但它可能會變得棘手... – Spudd86 2010-06-16 20:46:04