c++ - 设置小部件初始大小

标签 c++ layout gtk3

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

我试过gtk_widget_set_size_request(widget,w,h)之前widget已经实现了,然后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;
    }

提示:在创建这个示例时,问题出现在我添加 Pane 小部件时。

这是所需初始布局的屏幕截图。 Initial layout

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

最佳答案

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

关于c++ - 设置小部件初始大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45799092/

相关文章:

java - Vaadin 基本布局 : fixed header and footer + scrollable content

c - 如何在事件(单击)时清除输入框

python - 如何在笔记本选项卡pygtk中获取输入字段作为密码(*)

c++ - C++ 与 D 中的 sizeof 运算符和对齐

c++ - 井字游戏 AI : How to Make the Tree?

html - 如何在不隐藏部分 DIV 的情况下使用 CSS float

c - GTK3 - 单选按钮 : callback is called twice every time toggle the button

c++ - 比较图像的相似性

android - 使用 Android 智能手机和其他设备进行服务发现

java - 通过wrapper将LayoutPanel添加到RootPanel