如何使用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代码
我找到了解决方案:type_select_ item=g_,"type_select_item",sizeof(GTypeClass)+sizeof(GObjectClass),NULL,sizeof(struct-stock_element),NULL,0);