GTK&x2B;菜单栏看起来糟透了

GTK&x2B;菜单栏看起来糟透了,gtk,menubar,Gtk,Menubar,我正在按照说明编写Gtk+菜单栏 将棒料包装到带有 // "FALSE, TRUE" and "FALSE, FALSE" actually makes no difference gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar, TRUE, FALSE, 0); 菜单栏看起来很糟糕,如下所示: 当我改为: gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar,

我正在按照说明编写Gtk+菜单栏

将棒料包装到带有

// "FALSE, TRUE" and "FALSE, FALSE" actually makes no difference
gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar,
                   TRUE, FALSE, 0);
菜单栏看起来很糟糕,如下所示:

当我改为:

 gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar,
                    TRUE, TRUE, 0);
它看起来像:


那么,如何使工具栏分配的空间更小?

如果我正确理解了您的问题,您希望:

  • 去掉菜单栏周围的浅灰色填充
  • 在不展开菜单栏的情况下执行上述操作,以填充可用空间
  • 因此,您的另一个小部件(即菜单栏下方的按钮栏)的打包模式开始发挥作用(为了清楚起见,我将它们分别称为
    button\u hbox
    menu\u bar
    ,因为两者都可以称为“工具栏”)

    理解传递给的布尔布局参数在这里至关重要:

    • 如果小部件在计算布局后应该使用其容器中剩余的空白空间,则第一个选项,
      expand
      ,即
      TRUE
      。以这种方式打包的小部件平等地竞争剩余空间

    • 第二个选项,
      fill
      ,是
      TRUE
      ,如果小部件应该填充它所占用的布局空间,而不是居中(出现浅灰色填充)

    我们的想法是,在
    main_vbox
    中有一个(或多个,但现在让我们继续使用一个)主小部件,该小部件包含
    expand
    fill
    设置为
    TRUE
    。它周围的卫星窗口小部件包含
    expand
    设置为
    FALSE
    fill
    设置为
    TRUE
    。例如:

    +-------------------------------------------+
    |  Menu bar: expand = FALSE, fill = TRUE    |
    +-------------------------------------------+
    |  Toolbar: expand = FALSE, fill = TRUE     |
    +-------------------------------------------+  ^
    |                                           |  |
    |                                           |  |  The height of this widget
    |  Main widget: expand = TRUE, fill = TRUE  |  |  varies depending on the 
    |                                           |  |  height of its container.
    |                                           |  |
    +-------------------------------------------+  v
    |  Status bar: expand = FALSE, fill = TRUE  |
    +-------------------------------------------+
    
    在您的情况下,由于您不希望
    菜单栏
    填满可用空间,
    按钮盒
    应该这样做:

    // Menu bar: satellite widget, expand = FALSE, fill = TRUE
    gtk_box_pack_start(GTK_BOX(main_vbox), menu_bar, FALSE, TRUE, 0);
    
    // Button bar: main widget, expand = TRUE, fill = TRUE
    gtk_box_pack_start(GTK_BOX(main_vbox), button_hbox, TRUE, TRUE, 0);
    

    它不是有一个特殊的位置来放置吗?我不熟悉GTK的这一方面,但我知道Qt的QMainWindow有一个特定的菜单栏位置;它有三个点:菜单栏、中央部件和状态栏。@Frédéric Hamidi:Oops。我犯了一个错误。很抱歉我修改了我的问题。为难看的ASCII艺术道歉,我是老派:)