私のプロジェクトは、各従業員が中央データベースに独自のクライアント リストを作成できるようにするグラフィカル アプリケーションを作成することでしgtk3
たgtk2
。プロジェクトの最初から最後まではに基づいて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_hexpand()
およびgtk_widget_get_hexpand()
関数を使用せずにアプリケーションを動作させるには、次のようにします。
#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()
私はそれが正しくないことを知っています!child properties
実際には、 のを設定するwidgets
方法と、より具体的に を作成する方法がGValue
わかりませんG_TYPE_ENUM
。誰かが私を助けることができますか?
更新: @ptomato は、これに関するより良い解決策を提供してくれました。実際gtk_container_child_set()
には、then の代わりに関数を使用して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 に感謝!