设置小部件初始大小

时间:2017-08-21 14:02:49

标签: c++ layout gtk3

如何在GTK + 3中设置小部件初始大小?

我在实现窗口小部件之前尝试gtk_widget_set_size_request(widget,w,h),然后gtk_widget_set_size_request(widget,-1,-1)释放约束(在窗口小部件实现之后)。这导致更大的窗口具有更大的尺寸,但是窗口小部件的尺寸被最小化(它不记得我的初始尺寸)。

MCVE:

//@{"targets":[{"name":"initsize","type":"application","pkgconfig_libs":["gtk+-3.0"]}]}

#include <gtk/gtk.h>

int main()
    {
    gtk_init(NULL,NULL);
    auto window=gtk_window_new(GTK_WINDOW_TOPLEVEL);

    auto paned=gtk_paned_new(GTK_ORIENTATION_HORIZONTAL);
    gtk_container_add(GTK_CONTAINER(window),paned);

    auto scrollbox=gtk_scrolled_window_new(NULL,NULL);
    gtk_paned_add1(GTK_PANED(paned),scrollbox);

    auto other=gtk_label_new("Right panel");
    gtk_paned_add2(GTK_PANED(paned),other);

    auto tv=gtk_text_view_new();
    gtk_container_add(GTK_CONTAINER(scrollbox),tv);

    //Make the widget large
    gtk_widget_set_size_request(scrollbox,500,300); 
    gtk_widget_show_all(window);

    //Remove constraint. The new (larger) size of `window` is preserved as
    //desired, but `scrollbox` shrinks as a consequence of the constraint 
    //removal
    gtk_widget_set_size_request(scrollbox,-1,-1); 

    gtk_main();
    return 0;
    }

提示:创建此示例时,我添加了已修改的窗口小部件时出现问题。

以下是所需初始布局的截图。 Initial layout

我通过右边的ScrolledWindow的请求大小以及右边的GLArea实现了这一点(没有这个,一切都崩溃到几乎为零)。配置UI后,应该可以缩小任何这些面板,因此必须删除约束而不影响任何大小。我还尝试保留paned位置(获取其值,删除约束,并恢复旧位置,但这不起作用)。

1 个答案:

答案 0 :(得分:1)

最接近的解决方案可能是通过使用gtk_window_set_default_size()来解决问题并将主窗口的大小设置为所需大小的总和。然后使用gtk_paned_set_position ()和最左边的小部件的值。虽然这只是一个近似的解决方案,但对大多数应用来说应该足够了。