2011-11-17 65 views
0

我對GtkTreeView頗爲新穎。我正在創建一個包含多行的單列,並且我正在檢測用戶何時單擊每行(或本例中的單元格)。GTK +:GtkTreeView:單元格被點擊時傳遞額外的數據

我能夠從單元中檢索標籤,但它不僅僅足夠用於我需要做的事情。我有一個包含一些額外參數的結構,我想傳遞給它。我目前在整棵樹上使用了回調函數,如下所示:

GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); 
g_signal_connect(selection, "changed", G_CALLBACK(on_changed), selection); 

我在我的TreeView中追加行。是否有可能在每行創建一個唯一的信號,我可以通過我的結構作爲參數?否則,是否有另一種方法來傳遞函數的數據?問題是每行都有一個包含不同信息的獨特結構。

非常感謝。

編輯:

我還沒有理解TreeView的所有權力。我已經把所有東西都放在了我的模型中,並且工作得很好。對不起,我現在明白這個模型好多了。

+0

我解決了我的問題:我沒有理解TreeView的所有功能。我已經把所有東西都放在了我的模型中,並且工作得很好。對不起,我現在明白這個模型好多了。 – Jary

回答

1

雖然你已經找到了答案,只是增加了一些你可能會覺得有用的點:
1.當你將一個信號的回調連接到一個小部件時,通過你連接的小部件是多餘的回調作爲數據。在g_signal_connect(selection, "changed", G_CALLBACK(on_changed), selection);中傳遞selection,因爲數據是多餘的,因爲"changed"的回調函數的簽名具有第一個參數GtkTreeSelection *,通過它您將得到指向selection的指針。 AFAIK對於所有的信號回調都是如此;您會發現在回調函數中有GtkWidget *(或指向連接了信號回調的對象的指針)參數,通過該參數將獲得接收信號的對象。
2.如果您已經不知道,您自己發現的Model-View-Controller or MVC執行GtkTreeView。在這種模式下,數據邏輯,輸入交互邏輯是分開的。 GtkListStore & GtkTreeStore代表保存您的數據的模型。因此,要添加任何類型的數據你使用這些。在這種情況下,視圖或用戶界面由GtkTreeView,GtkCellRenderer等組成。當然,您可以通過藉助信號&回調來處理用戶輸入來控制交互。
希望這有助於!

+0

非常感謝。我不知道1),我修好了。這就是我發現的2),我還沒有完全理解分離。非常感謝你的幫助! – Jary