在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