我对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 :(得分:1)
虽然您已找到答案,但只添加了一些您可能会觉得有用的要点:
1.当您将信号的回调连接到窗口小部件时,将要将回调连接到的窗口小部件作为数据传递是多余的。在g_signal_connect(selection, "changed", G_CALLBACK(on_changed), selection);
传递selection
时,因为数据是多余的,因为"changed"
签名的回调函数的第一个参数为GtkTreeSelection *
,您将通过该参数获取selection
的指针。 AFAIK对于所有信号回调都是如此;您会发现回调函数中有GtkWidget *
(或指向连接信号回调的对象的指针)参数,通过该参数将获得接收信号的对象。
2.如果您已经不知道,您在GtkTreeView
中Model-View-Controller
or MVC
实施了{{3}}。在这种模式中,数据逻辑,UI&输入交互逻辑是分开的。 GtkListStore
& GtkTreeStore
代表保存数据的模型。因此,要添加任何类型的数据,您可以使用这些数据。在这种情况下,视图或用户界面由GtkTreeView
,GtkCellRenderer
等组成。当然,您可以通过信号处理用户输入来控制交互。回调。
希望这有帮助!