GTK+;:GtkTreeView:单击单元格时传递额外数据

GTK+;:GtkTreeView:单击单元格时传递额外数据,gtk,Gtk,我是GtkTreeView的新手。我正在创建一个包含多行的单列,并检测用户何时单击每行(本例中为单元格) 我可以从细胞中提取标签,但这不仅仅是我需要做的事情。我有一个结构,其中包含一些我想传递的额外参数。我目前正在对整个树使用回调,如下所示: GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list)); g_signal_connect(selection, "changed", G_CALLBAC

我是GtkTreeView的新手。我正在创建一个包含多行的单列,并检测用户何时单击每行(本例中为单元格)

我可以从细胞中提取标签,但这不仅仅是我需要做的事情。我有一个结构,其中包含一些我想传递的额外参数。我目前正在对整个树使用回调,如下所示:

GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(list));
g_signal_connect(selection, "changed", G_CALLBACK(on_changed), selection);
我在树视图中追加行。是否可以为每行创建一个唯一的信号,在这里我可以将struct作为参数传递?否则,是否有其他方法为函数传递数据?问题是每一行都有一个包含不同信息的唯一结构

多谢各位

编辑:


我还没有完全理解树景的力量。我已经把所有的东西都放在我的模型里了,它工作得很好。对不起,伙计们,我现在对模型的理解好多了。

尽管您发现您的答案只是添加了几点您可能会觉得有用的内容:
1.将信号回调连接到小部件时,将回调连接到的小部件作为数据传递是多余的。在<代码>g_信号连接(选择,“已更改”,g_回调(打开已更改),选择)作为数据传递
选择
是多余的,因为
的回调函数“changed”
签名的第一个参数是
GtkTreeSelection*
,通过它您将获得指向
选择
的指针。AFAIK对于所有的信号回调都是如此;您会发现回调函数中有
GtkWidget*
(或指向连接信号回调的对象的指针)参数,通过该参数将获取接收信号的对象。
2.如果您还不知道,您自己发现的是
GtkTreeView
中的实现。在此模式中,数据逻辑、UI和输入交互逻辑是分开的
GtkListStore
GtkTreeStore
表示保存数据的模型。因此,要添加任何类型的数据,都需要使用这些数据。在这种情况下,视图或UI由
GtkTreeView
GtkCellRenderer
等组成。当然,您可以借助信号和回调处理用户输入来控制交互。

希望这有帮助

我解决了我的问题:我还不了解树视图的所有功能。我已经把所有的东西都放在我的模型里了,它工作得很好。对不起,伙计们,我现在更了解这个模型了。非常感谢。我不知道,我把它修好了。这就是我发现的原因(2),我还没有完全理解分离。非常感谢你的帮助!