2013-04-07 104 views
0

我正在使用glade製作我的.ui文件,然後使用GtkBuilder我在C程序中加載了整個.ui文件,因此所有的小部件和東西都是從構建器文件本身。使用glade將用戶數據傳遞給回調函數

此前我只是從代碼本身創建小部件,因此允許我將任何類型的數據傳遞給回調函數,因爲第二個參數是一個gpointer變量,我可以隨時創建一個指向自定義結構的指針並傳遞任何類型的數據到回調。

但現在連接到我只是用這個簡單的功能的信號:

gtk_builder_connect_signals(builder, NULL); 

其中builder是指向GtkBuilder

這會連接在與那些在.c文件定義的函數空地文件中提到的所有信號,而不必經過的user_data其他比小部件的任何規定(其本身可以只在空地來定義。)

任何人都可以告訴我一個解決方案,以便我可以將任何類型的數據傳遞給我的回調。我不想離開glade,因爲它節省了我很多時間,因此我不想切換到僅通過代碼創建小部件的傳統方式。

同時使用g_connect_signal()和gtk_builder_connect_signals()會有幫助。在這種情況下,哪一個先調用來覆蓋信號連接。

回答

0

您可以撥打gtk_builder_get_object來檢索由Glade創建的任何由Widget創建的窗口小部件的名稱。然後,您可以使用通常的g_connect_signal API將小部件連接到信號。缺點是你不能再簡單地在峽谷定義中「提及」信號。

另一種方式是也使用gtk_builder_get_object來獲取對象,但要呼叫g_object_set_qdata將必要的用戶數據與您知道的GQuark密鑰相關聯。您的回叫可以使用g_object_get_qdata使用相同的密鑰從小部件中獲取用戶數據。這有一個好處,你仍然會使用gtk_builder_connect_signals

相關問題