如何将gtk窗口映射到数据
我们正在使用GTK编写一个诊断工具。您应该在自己的窗口中查看不同对象的几个属性。因此,您应该能够打开几个相等的窗口,每个窗口都“连接”到特定的对象。例如,单击按钮时,将调用相应的GTK回调。但是,由于所有窗口都是相等的,所以没有自然的方法来确定应该修改哪个对象。我们如何才能以一种好的方式将每个窗口映射到它的对象?如何将gtk窗口映射到数据,gtk,Gtk,我们正在使用GTK编写一个诊断工具。您应该在自己的窗口中查看不同对象的几个属性。因此,您应该能够打开几个相等的窗口,每个窗口都“连接”到特定的对象。例如,单击按钮时,将调用相应的GTK回调。但是,由于所有窗口都是相等的,所以没有自然的方法来确定应该修改哪个对象。我们如何才能以一种好的方式将每个窗口映射到它的对象? 现在我们使用一个映射,从gtk窗口映射到一个对象,但这感觉更像是一个黑客。我们能以更优雅的方式传递有关对象的信息吗?GtkWindow是GObject的一个间接子类,因此您可以使用函数
现在我们使用一个映射,从gtk窗口映射到一个对象,但这感觉更像是一个黑客。我们能以更优雅的方式传递有关对象的信息吗?
GtkWindow
是GObject
的一个间接子类,因此您可以使用函数族g_object_set
和g_object_get
(和g_object_set_data
,等等).我是上面提到的寻找解决方案的团队之一。到目前为止,我的工作是:创建一个Gvalue对象,并希望将其添加到GTKWindow窗口
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;
}
extern“C”G_模块_导出void on按钮单击(GtkObject*调用者,gpointer数据){
GValue _-pid;
GtkWidget*window=gtk_小部件_获取_顶层(gtk_小部件(调用者));
g_object_get_属性(g_object(window),“processID”和_pid);
这是回答问题的地方,不是问题。顺便说一句,你的问题是你设置了一个“pID”属性并试图检索一个“processID”属性。是的,这只是一个键入问题,而编辑这个错误的位置(sry)问题。问题仍然存在。但您的意思是,通常情况下这应该可以工作?从文档中可以看出,g_object_get_属性仅用于绑定。您应该使用g_object_get和g_object_set。我不是GObject专家,但我认为您需要先创建属性,然后才能获取/设置它。请参阅g_object_class_install_属性和GObject文档中的g_对象\u类\u安装\u属性。