GLib创建新类型

时间:2014-09-16 16:45:50

标签: glib gobject

如何使用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-WARNING **:类型' type_select_item'的指定班级大小小于父类型' GObject'班级人数

3 个答案:

答案 0 :(得分:2)

如果您坚持使用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);

答案 1 :(得分:-1)

也许你可以看到我的一些作品,先是.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

答案 2 :(得分:-3)

我找到了解决方案:     type_select_item = g_type_register_static_simple(G_TYPE_OBJECT,                                " type_select_item&#34 ;,                                sizeof(GTypeClass)+ sizeof(GObjectClass),                                空值,                                sizeof(struct stock_element),                                空值,                                0);