Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将gtk窗口映射到数据_Gtk - Fatal编程技术网

如何将gtk窗口映射到数据

如何将gtk窗口映射到数据,gtk,Gtk,我们正在使用GTK编写一个诊断工具。您应该在自己的窗口中查看不同对象的几个属性。因此,您应该能够打开几个相等的窗口,每个窗口都“连接”到特定的对象。例如,单击按钮时,将调用相应的GTK回调。但是,由于所有窗口都是相等的,所以没有自然的方法来确定应该修改哪个对象。我们如何才能以一种好的方式将每个窗口映射到它的对象? 现在我们使用一个映射,从gtk窗口映射到一个对象,但这感觉更像是一个黑客。我们能以更优雅的方式传递有关对象的信息吗?GtkWindow是GObject的一个间接子类,因此您可以使用函数

我们正在使用GTK编写一个诊断工具。您应该在自己的窗口中查看不同对象的几个属性。因此,您应该能够打开几个相等的窗口,每个窗口都“连接”到特定的对象。例如,单击按钮时,将调用相应的GTK回调。但是,由于所有窗口都是相等的,所以没有自然的方法来确定应该修改哪个对象。我们如何才能以一种好的方式将每个窗口映射到它的对象?
现在我们使用一个映射,从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属性。