2012-03-14 36 views
1

我們正在編寫使用GTK診斷工具。你應該看自己的窗口中的不同項目的幾個屬性。所以你應該能夠打開幾個平等的窗口,每個窗口都附加到一個特定的對象上。例如,當點擊一個按鈕時,調用適當的GTK回調。但是,由於所有的窗戶都是平等的,所以沒有自然的方法來查看哪個對象應該改變。我們怎樣才能把每個窗口映射到它的對象上? 現在我們使用的地圖,從GTK窗口對象的映射,但給人的感覺更像一個黑客。我們能否以更優雅的方式交出關於物體的信息?如何映射一個GTK窗口數據

回答

2

GtkWindowGObject間接子類,所以你可以使用的功能g_object_setg_object_get(和g_object_set_data等)的家庭。

0

我上面尋找一個解決方案中提到的球隊之一。這是我到目前爲止的工作:我創建一個Gvalue對象,並且想把它添加到GTKWindow window

int pid = 12345; 
GValue val = G_VALUE_INIT; 
g_value_init (&val, G_TYPE_INT); 
g_value_set_int (&val, pid); 
g_object_set (G_OBJECT(window), "pID", &val, NULL); //add to GTKWindow 

當按下該窗口中的下列signalfunction使用按鈕:

extern "C" G_MODULE_EXPORT void onButtonStepClicked(GtkObject* caller, gpointer data){ 
    GValue _pid; 
    GtkWidget* window = gtk_widget_get_toplevel (GTK_WIDGET(caller)); 
    g_object_get_property(G_OBJECT(window), "processID", &_pid); 
    cout << (int)g_value_get_int(&pID) << endl; 
} 

但現在我得到警告我的終端:

的GLib,GObject的-WARNING **:g_object_set_valist :對象類GtkWindow' has no property named pID的」

所以我GOOGLE了一段時間,發現了一個例子,其中我必須首先安裝這個屬性的一類。這是有道理的,還是我錯過了這裏的東西?

+0

這是回答的問題的地方,沒有。順便說一句,我這是你的問題是,你設置一個「pID」屬性,並嘗試檢索「processID」屬性。 – liberforce 2012-03-14 16:55:38

+0

是的,這只是一個打字問題,而編輯這個錯誤定位(sry)的問題。問題依然存在。 但你的意思是,通常這應該工作? – sobolog 2012-03-14 17:50:26

+0

從文檔中,g_object_get_property僅用於綁定。您應該改用g_object_get和g_object_set。我不是GObject的專家,但我認爲你需要創建屬性才能獲取/設置它。請參閱GObject文檔中的g_object_class_install_property和g_object_class_install_properties。 – liberforce 2012-03-15 08:49:50