2011-06-06 42 views
3

現在我有一個窗口包含許多執行類似行爲的按鈕,因此對它們使用相同的信號處理程序是很自然的。但是,在信號發生後,我無法區分它們。是的,我有指向該對象的指針,但我無法確定它是第一個按鈕,第二個按鈕還是別的。Gtk + Glade:使用相同信號處理程序的小部件。如何區別對方?

我認爲在林間空地的'Name'屬性(我將它設置爲'togglebutton1')可以通過gtk_widget_get_name函數獲得,但是我錯了,我得到了'GtkToggleButton'。該XML文件說:<object class="GtkToggleButton" id="togglebutton1">

那麼無論如何要利用'id'屬性,還是有任何更好的解決方案來識別thoses按鈕?非常感謝。

回答

3

您獲得像「GTKToggleButton」的值的原因是因爲您尚未使用gtk_widget_set_name手動設置名稱。根據GTK文檔:

窗口小部件名稱的微件的默認類型(例如「的GtkButton」),或者可以被設置爲應用程序特定的值與gtk_widget_set_name()。

因此,使用gtk_widget_set_name,使自定義名稱爲您的按鈕,如果你需要的對象之間的更具體的差異,使用gtk_widget_path爲對象獲得的全路徑名。也就是說,它會返回完整窗口層次,讓您在不同的窗口類似命名的按鍵區分開來,或者讓你組按鈕由其父窗口名稱等

編輯:您還可以在使用gtk_buildable_get_name爲了從XML UI定義文件中獲取小部件的實際ID值。所以如果你想避免使用gtk_widget_set_name這是另一種選擇。我假設你是XML UI定義與GTKBuilder兼容。

+0

非常感謝,還有一個問題,你知道從UI分離代碼是一個好習慣,所以最好不要在代碼中使用gtk_widget_set_name,而應該在代碼中使用gtk_widget_set_name。有沒有什麼方法可以在glade中使用'Name'屬性,或者在glade中執行gtk_widget_set_name行爲? – Cauly 2011-06-06 14:38:16

+0

我在回答中添加了一些額外的信息。 – Jason 2011-06-06 15:12:06

相關問題