有没有办法,使用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