GTK +:布局对齐问题

时间:2011-11-22 08:36:32

标签: gtk

我有一个很难描述的简单问题。

我的GTK +窗口如下所示:

想象一下,它有3个组件:2个按钮工具栏和一个绘图区域。

在左边我有一个垂直的按钮工具栏,右边有绘图区域(很大),下面是一个水平的按钮工具栏。

我试图让左侧垂直工具栏正好位于绘图区域的中间,但水平位于绘图区域的下方,但第一个按钮应该从绘图区域开始的位置开始。

我可以得到一个(我的任何条件),但不能同时得到两个!

我是否可以按照我想要的方式调整组件?

我正在为我放置按钮的垂直工具栏创建一个vbox。我有另一个垂直组件,包括绘图区域和水平工具栏(这是它自己的hbox)。之后,我创建一个中心对齐并将按钮的垂直工具栏放入其中。最后,我将这两个元素重新组合在一个hbox中。

结果是水平条位于绘图区域正下方的位置,但左侧的垂直条位于绘图区域和水平条的中心(而不仅仅是水平区域)。 / p>

我正在下面的代码,但希望它不是很难阅读:

    GtkWidget *infoBox = gtk_vbox_new(FALSE, 10);
    GtkWidget *drawingArea = gtk_drawing_area_new();

    GtkWidget *toolBar = gtk_vbox_new(FALSE, 10);
    /* Put the buttons (vertical bar on the left) */

    GtkWidget *deviceButtons = gtk_hbox_new(FALSE, 5);
    /* Put the buttons (horizontal bar below the drawing area) */

    GtkWidget *verticalView = gtk_vbox_new(FALSE, 10);

    GtkWidget *centerAlignment = gtk_alignment_new(0, 0.5, 0, 0);
    gtk_container_add(GTK_CONTAINER(centerAlignment), toolBar);

    GtkWidget *actionView = gtk_hbox_new(FALSE, 15);
    gtk_box_pack_start(GTK_BOX(actionView), centerAlignment, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(verticalView), drawingArea, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(verticalView), deviceButtons, FALSE, FALSE, 0);
    gtk_box_pack_start(GTK_BOX(actionView), verticalView, FALSE, FALSE, 0);
    GtkWidget *deviceView = gtk_vbox_new(FALSE, 10);
    gtk_box_pack_start(GTK_BOX(deviceView), actionView, FALSE, FALSE, 0);

    gtk_box_pack_start(GTK_BOX(infoBox), deviceView, FALSE, FALSE, 0);

    gtk_container_add(GTK_CONTAINER(deviceWindow), infoBox);

我真的很想知道我的问题是否可以解决。我想我正在根据一个元素的位置(绘图区域)定义两个容器(或元素,按钮栏)的位置,我不知道是否可能。

非常感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用2x2 GtkTable并保持左下角的单元格为空。

答案 1 :(得分:2)

正如约翰内斯所说,你应该使用GtkTable。问题是,在尺寸计算中,左下角的空间将始终考虑在内,无论是在HBox还是VBox中。因此,您的工具栏中没有任何工具栏应该放在那里扩展的容器中。

看到这张图: Widgets placement

红色区域无法分配给任何工具栏,否则将无法按照您想要的方式对齐。我认为对齐不会帮助你。所以我看到的唯一解决方案是使用GtkTable。此外,在GTK3中,GtkHBox和GtkVBox已被弃用,以及GtkTable,并被GtkGrid取代,GtkGrid或多或少与GtkTable一样。