GLib创建新类型



如何使用GLib创建新类型?

我创建了这个程序:

struct stock_element {
   GType type;
   GtkTreeIter *iter;
   GtkListStore *model;
};
int main(int argc, char **argv)
{
   GType a =g_type_register_static_simple (G_TYPE_OBJECT,
                           "type_select_item",
                           sizeof(GTypeClass) + sizeof(GObject),
                           NULL,
                           sizeof(struct stock_element),
                           NULL,
                           0);
  }

但我收到了以下警告:GLib GObject警告**:为类型"type_select_item"指定的类大小小于父类型的"GObject"类大小

如果您坚持使用g_type_register_static_simple,至少要正确使用它。

您必须定义两个不同的结构:类和实例。这些是我所知道的任何面向对象实现的基本概念,它们并不是GTK+特有的。

如果要继承GObject,则必须将其用作结构中的第一个字段。不确定您是从哪里得到使用GType的想法的。

struct StockElementClass {
    GObjectClass gobject_class;
};
struct StockElement {
    GObject gobject;
    GtkTreeIter *iter;
    GtkListStore *model;
};

只有这样,您才能注册自己的类型。

GType a = g_type_register_static_simple(G_TYPE_OBJECT,
                                        "StockElement",
                                        sizeof(struct StockElementClass),
                                        NULL,
                                        sizeof(struct StockElement),
                                        NULL,
                                        0);

您的代码正在工作只是一个巧合,因为您提供了足够的空间来分配类和实例结构。以下(错误的)代码由于相同的巧合而起作用:

g_type_register_static_simple(G_TYPE_OBJECT, "StockElement",
                              1234, NULL, 1234, NULL, 0);

也许你可以先看看我的一些作品。h:

https://github.com/benoitfragit/pocketVox/blob/master/src/lib/pocketvox-module.h

然后是.c文件:https://github.com/benoitfragit/pocketVox/blob/master/src/lib/pocketvox-module.c

在这里,我使用bollertemplate代码

创建了一个新类型的PocketvoxModuel

我找到了解决方案:type_select_ item=g_,"type_select_item",sizeof(GTypeClass)+sizeof(GObjectClass),NULL,sizeof(struct-stock_element),NULL,0);

最新更新