是否可以将私人数据添加到GtkWidget?

时间:2016-04-06 13:10:49

标签: c gtk gtk2

是否可以将私人数据添加到GtkWidget

背景

我有很多GtkCheckBotton个,所有这些小部件都连接到同一个回调。在回调中,我想处理小部件私有数据(或者至少区分小部件)。

示例:

// checkbox signal callback
void on_checkbox_tcoggled(GtkWidget* widget, gpointer data) {
    MyClass* me = data;
    MyPrivateData* priv = widget->priv;  // ???

    MyClass_foo(me, priv);
}

1 个答案:

答案 0 :(得分:6)

  

是否可以将私人数据添加到GtkWidget?

您可以使用g_object_set_datag_object_get_data函数向任意GObject添加任意数据。

MyPrivateData *priv = ...
g_object_set_data(G_OBJECT(widget), "my private data", priv);

// ...

void on_checkbox1_toggled(GtkWidget* widget, gpointer data) {
    MyClass* me = data;
    MyPrivateData* priv = (MyPrivateData*) g_object_get_data(G_OBJECT(widget), "my private data");

    MyClass_foo(me, priv);
}