关于g_object_get_data和g_object_set_data
2008-09-11 13:53
579 查看
在glib结构中,g_object_get_data()和g_object_set_data()这两个接口函数是比较常见的,它的作用也是比较大的,它们的综合作用相当于一个全局变量,通过object对象保存上下文的信息。
g_object_set_data(GObject* object, gchar* key, gpointer user_data)这个函数是让object对象携带user_data这个指针值,然后通过g_object_get_data(GObject* object, gchar* key)这个函数,利用key指向的字符串取出user_data值,进而通过user_data可以访问它指向的对象。一个object对象可以携带多个user_data的值的。通过下面的一段简单代码就可以理解得更加清楚:
#include <stdio.h>
#include <glib-object.h>
#include <gtk/gtk.h>
#define STRING_KEY "string_key"
void object_data_get(GtkWidget* thiz)
{
char* var = g_object_get_data(G_OBJECT(thiz), STRING_KEY);
printf("the string = %s /n", var);
return ;
}
int main(int argc, char**argv)
{
gtk_init(&argc, &argv);
GtkWidget* label = gtk_label_new("this is a new lable");
char* string = "helloworld";
g_object_set_data(G_OBJECT(label), STRING_KEY, string);
object_data_get(label);
return ;
}
将会打印出结果:the string = helloworld
g_object_set_data(GObject* object, gchar* key, gpointer user_data)这个函数是让object对象携带user_data这个指针值,然后通过g_object_get_data(GObject* object, gchar* key)这个函数,利用key指向的字符串取出user_data值,进而通过user_data可以访问它指向的对象。一个object对象可以携带多个user_data的值的。通过下面的一段简单代码就可以理解得更加清楚:
#include <stdio.h>
#include <glib-object.h>
#include <gtk/gtk.h>
#define STRING_KEY "string_key"
void object_data_get(GtkWidget* thiz)
{
char* var = g_object_get_data(G_OBJECT(thiz), STRING_KEY);
printf("the string = %s /n", var);
return ;
}
int main(int argc, char**argv)
{
gtk_init(&argc, &argv);
GtkWidget* label = gtk_label_new("this is a new lable");
char* string = "helloworld";
g_object_set_data(G_OBJECT(label), STRING_KEY, string);
object_data_get(label);
return ;
}
将会打印出结果:the string = helloworld
相关文章推荐
- 关于Object.defineProperty的get和set
- 07 - 删除vtkDataObject中的SetExtentTranslator 和 GetExtentTranslator方法 VTK 6.0 迁移
- IOS 关于objc_setAssociatedObject,objc_getAssociatedObject
- 关于SET/GET PARAMETER ID的注意事项,以及取own data中数据的方法
- vc中关于SetItemData和GetItemData与对象相关联
- 关于SetItemData和GetItemData
- 关于PB中setsqlselect、dw_1.modify()和dw_1.object.DataWindow.Table.Select
- 关于Combobox SetItemData与GetItemData
- 关于SetFileTime参数设置错误(GetLastError() = 87)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- 关于JSONP与UWA.DATA.getJson的区别
- JAVA中关于set()和get()方法的理解及使用
- objc_getAssociatedObject, objc_setAssociatedObject
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)
- [Objective-C]关联(objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects)(转)
- JavaScript巧用Object的get和set方法实现js变量的动态监听
- SetEventData和GetEventData在WinXP的解决方案
- JAVA中关于set()和get()方法的理解及使用
- 关联 objc_setAssociatedObject、objc_getAssociatedObject、objc_removeAssociatedObjects