關於g_object_get_data和g_object_set_data

來源:互聯網
上載者:User

  

      在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的值的。通過下面的一段簡單代碼就可以理解得更加清楚:

  1. #include <stdio.h>
  2. #include <glib-object.h>
  3. #include <gtk/gtk.h>

  4. #define STRING_KEY  "string_key"
  5. void object_data_get(GtkWidget* thiz)
  6. {
  7.     char* var = g_object_get_data(G_OBJECT(thiz), STRING_KEY);
  8.     printf("the string = %s /n", var);

  9.     return ;
  10. }

  11. int main(int argc, char**argv)
  12. {
  13.     gtk_init(&argc, &argv);

  14.     GtkWidget* label = gtk_label_new("this is a new lable");
  15.     char* string = "helloworld";

  16.     g_object_set_data(G_OBJECT(label), STRING_KEY, string);
  17.     object_data_get(label);

  18.     return ;
  19. }


將會列印出結果:the string = helloworld

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.