如何将gtk窗口映射到数据

时间:2012-03-14 10:57:59

标签: gtk

我们正在使用GTK编写诊断工具。您应该在自己的窗口中观看不同对象的多个属性。因此,您应该能够打开几个相同的窗口,每个窗口“附加”到特定对象。例如,当单击按钮时,将调用相应的GTK回调。但由于所有窗口都相同,因此没有自然的方法来查看应该更改哪个对象。我们怎么能以一种好的方式将每个窗口映射到它的对象? 现在我们使用一个映射,从gtk窗口映射到一个对象,但这感觉更像是一个黑客。我们能以更优雅的方式交出有关物体的信息吗?

2 个答案:

答案 0 :(得分:2)

GtkWindowGObject的间接子类,因此您可以使用函数族g_object_setg_object_get(以及g_object_set_data等)。

答案 1 :(得分:0)

我是上面提到的寻找解决方案的团队之一。这是我到目前为止所做的工作:我创建了一个Gvalue对象,并希望将其添加到GTKWindow window

int pid = 12345;
GValue val = G_VALUE_INIT;
g_value_init (&val, G_TYPE_INT);
g_value_set_int (&val, pid);
g_object_set (G_OBJECT(window), "pID", &val, NULL); //add to GTKWindow

按下此窗口中的按钮时,将使用以下信号功能:

extern "C" G_MODULE_EXPORT void onButtonStepClicked(GtkObject* caller, gpointer data){
    GValue _pid;
    GtkWidget* window = gtk_widget_get_toplevel (GTK_WIDGET(caller));
    g_object_get_property(G_OBJECT(window), "processID", &_pid);
    cout << (int)g_value_get_int(&pID) << endl;
}

但现在我收到了终端的警告:

GLib-GObject-WARNING **:g_object_set_valist:对象类GtkWindow' has no property named pID'

所以我google了一段时间,发现了一个例子,我首先要将这个属性安装到一个类中。这有道理,还是我错过了什么?