gpt4 book ai didi

c - 如何使用 `enum` 类型设置小部件属性,如 `GtkAttachOptions` ?我正在尝试模拟 `gtk_widget_set_vexpand` 以在 `gtk2` 上工作

转载 作者:太空狗 更新时间:2023-10-29 12:35:07 26 4
gpt4 key购买 nike

我的项目是创建一个图形应用程序来帮助每个员工在中央数据库中创建自己的客户列表,我遇到的唯一问题是 gtk3gtk2 之间的兼容性。项目从头到尾都是基于gtk3,然后我才发现有员工只用gtk2的系统。因此,我毫不费力地对实现进行了一些修改,并且在其目的上没有任何问题。我想完成的最后一件事是模拟 gtk_widget_get_hexpand() 的功能和 gtk_widget_get_vexpand() ...它们仅在 gtk3 中。为了使其他函数以与 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_heexpand()gtk_widget_get_heexpand() 函数的情况下工作,只需:

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

因为用宏来模拟这些功能稍微复杂一点,所以我尝试这样做:

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 更具体地说如何使用 G_TYPE_ENUM< 创建 GValue/。有人可以帮助我吗?

更新:@ptomato 给了我一个更好的解决方案。实际上通过使用 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);

关于c - 如何使用 `enum` 类型设置小部件属性,如 `GtkAttachOptions` ?我正在尝试模拟 `gtk_widget_set_vexpand` 以在 `gtk2` 上工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13694074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com