Tag: gobject

如何覆盖GstBin中的handle_message?

试图创建一个子类: mybin.h: #pragma once #include G_BEGIN_DECLS G_DECLARE_DERIVABLE_TYPE(MyBin, my_bin, MY, BIN, GstBin) struct _MyBinClass { GstBinClass parent_class; }; GstElement* my_bin_new(const gchar *name); G_END_DECLS mybin.c: #include “mybin.h” G_DEFINE_TYPE(MyBin, my_bin, GST_TYPE_BIN) static void my_bin_init(MyBin *bin) { } static void my_bin_class_init(MyBinClass *class) { // virtual function overrides go here } GstElement* my_bin_new(const gchar *name) { // ??? } 在my_bin_new()写什么来调用my_bin_class_init() […]

有没有一个很好的方法来复制Gtk小部件?

有没有办法,使用C中的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)); 周围的代码创建了一个vbox并将其打包在一个窗口中并运行gtk_main()。 这将导致这些难以理解的错误消息: (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可以使用理论上的可复制接口。