如何使用像`GtkAttachOptions“枚举types设置小部件属性? 我试图模拟`gtk_widget_set_vexpand`在`gtk2`上工作

我的项目是创build一个graphics应用程序来帮助每个员工在中央数据库中创build自己的客户列表,唯一的问题是gtk3gtk2之间的兼容性。 该项目始终是基于gtk3 ,然后我意识到有员工只使用gtk2的系统。 所以我对这个实现进行了一些修改,没有什么问题。 我想完成的最后一件事就是模拟gtk_widget_get_hexpand()gtk_widget_get_vexpand()的函数……它们只在gtk3 。 对于其他function工作方式与gtk3相同,我做了这样的事情:

 #define gtk_grid_new() gtk_table_new(1,1,false) #define GTK_GRID(x) GTK_TABLE(x) #define GtkGrid GtkTable #define gtk_grid_attach(x1,x2,x3,x4,x5,x6) gtk_table_attach(x1,x2,x3,x3+x5,x4,x4+x6,GTK_FILL,GTK_FILL,0,0) 

要让应用程序在没有gtk_widget_get_hexpand()gtk_widget_get_hexpand()函数的情况下工作,只需:

 #define gtk_widget_set_hexpand(x1,x2) #define gtk_widget_set_vexpand(x1,x2) 

因为用macros来模拟这些函数稍微复杂一些,我试图做这样的事情:

 inline void gtk_widget_set_hexpand(GtkWidget* widget,gboolean expanded) { GValue value = G_VALUE_INIT; g_value_init(&value,G_TYPE_ENUM); if(expanded) g_value_set_enum(&value,GTK_EXPAND); else g_value_set_enum(&value,GTK_FILL); gtk_container_child_set_property(GTK_CONTAINER(gtk_widget_get_parent(widget)),widget,"x-options",&value); } inline void gtk_widget_set_vexpand(GtkWidget* widget,gboolean expanded) { GValue value = G_VALUE_INIT; g_value_init(&value,G_TYPE_ENUM); if(expanded) g_value_set_enum(&value,GTK_EXPAND); else g_value_set_enum(&value,GTK_FILL); gtk_container_child_set_property(GTK_CONTAINER(gtk_widget_get_parent(widget)),widget,"y-options",&value); } 

gtk_container_child_set_property()

我知道这是不正确的! 其实我不知道如何设置widgetschild properties ,更具体的如何创buildG_TYPE_ENUMGValue 。 有人能帮我吗?

更新:@ptomato给了我一个更好的解决scheme。 实际上,通过使用gtk_container_child_set()函数而不是gtk_container_child_set_property()那么:

 #define gtk_widget_set_hexpand(x1,x2) gtk_container_child_set(GTK_CONTAINER(gtk_widget_get_parent(x1)),x1,"x-options",(x2)?(GTK_FILL|GTK_EXPAND):GTK_FILL,NULL); #define gtk_widget_set_vexpand(x1,x2) gtk_container_child_set(GTK_CONTAINER(gtk_widget_get_parent(x1)),x1,"y-options",(x2)?(GTK_FILL|GTK_EXPAND):GTK_FILL,NULL); 

成功了! 感谢@ptomato!

改用gtk_container_child_set()

 gtk_container_child_set(GTK_CONTAINER(gtk_widget_get_parent(widget)), widget, "y-options", expanded? GTK_EXPAND : GTK_FILL, NULL);