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