如何使用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'班级人数
答案 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);