我们正在使用GTK编写诊断工具。您应该在自己的窗口中观看不同对象的多个属性。因此,您应该能够打开几个相同的窗口,每个窗口“附加”到特定对象。例如,当单击按钮时,将调用相应的GTK回调。但由于所有窗口都相同,因此没有自然的方法来查看应该更改哪个对象。我们怎么能以一种好的方式将每个窗口映射到它的对象? 现在我们使用一个映射,从gtk窗口映射到一个对象,但这感觉更像是一个黑客。我们能以更优雅的方式交出有关物体的信息吗?
答案 0 :(得分:2)
GtkWindow
是GObject
的间接子类,因此您可以使用函数族g_object_set
和g_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了一段时间,发现了一个例子,我首先要将这个属性安装到一个类中。这有道理,还是我错过了什么?