2

私のプロジェクトは、各従業員が中央データベースに独自のクライアント リストを作成できるようにするグラフィカル アプリケーションを作成することでしgtk3gtk2。プロジェクトの最初から最後まではに基づいてgtk3おり、システムだけを使用している従業員がいることに気付きましたgtk2。そのため、実装に問題なくいくつかの変更を加え、その目的上問題なく動作します。私が終わらせたい最後のことは、 の機能をシミュレートすることです ... それらは にしかありませgtk_widget_get_hexpand()ん。他の機能が同じように機能するために、 私は次のようなことをしました:gtk_widget_get_vexpand()gtk3gtk3

#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 に感謝!

4

1 に答える 1

1

gtk_container_child_set()代わりに使用してください:

gtk_container_child_set(GTK_CONTAINER(gtk_widget_get_parent(widget)), widget,
    "y-options", expanded? GTK_EXPAND : GTK_FILL,
    NULL);
于 2012-12-04T09:08:29.557 に答える