GTK+:布局对齐问题

GTK+:布局对齐问题,gtk,Gtk,我有一个很难描述的简单问题 我的GTK+窗口如下所示: 假设它有3个组件:2个按钮工具栏和一个绘图区域 在左边我有一个垂直的按钮工具栏,在右边有一个很大的绘图区域,下面是一个水平的按钮工具栏 我试图让左边的垂直工具栏正好在绘图区域的中间,但是水平在绘图区域的下方,但是第一个按钮应该从绘图区域开始的地方开始。 我可以得到一个我的任何条件,但不是两个 我是否可以按照我希望的方式对齐我的组件 我正在为放置按钮的垂直工具栏创建vbox。我有另一个垂直组件,带有绘图区域和水平工具栏,这是它自己的hbox。

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

我的GTK+窗口如下所示:

假设它有3个组件:2个按钮工具栏和一个绘图区域

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

我试图让左边的垂直工具栏正好在绘图区域的中间,但是水平在绘图区域的下方,但是第一个按钮应该从绘图区域开始的地方开始。 我可以得到一个我的任何条件,但不是两个

我是否可以按照我希望的方式对齐我的组件

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

结果是,水平条位于绘图区域右侧的下方,但左侧的垂直条位于绘图区域和水平条的中心,而不仅仅是水平区域

我将代码放在下面,但希望不会太难阅读:

    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);
我很想知道我的问题是否可以解决。我想我是在定义两个容器或元素的位置,按钮栏基于绘图区域中一个元素的位置,我不知道这是否可行


非常感谢。

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

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

正如Johannes所说,您应该使用GtkTable进行此操作。问题是,无论是在HBox还是VBox中,在计算大小时都会考虑左下角的空间。因此,所有工具栏都不应位于展开的容器中

见下图:


红色区域不能分配给任何工具栏,否则它将不会按照您想要的方式对齐。我想,在这里,对齐对你没有帮助。因此,我看到的唯一解决方案是使用GtkTable。此外,在GTK3中,GtkHBox和GTKVOX以及GtkTable都已被弃用,取而代之的是GtkGrid,它的工作原理或多或少类似于GtkTable。

正如Johannes所说,您应该使用GtkTable。问题是,无论是在HBox还是VBox中,在计算大小时都会考虑左下角的空间。因此,所有工具栏都不应位于展开的容器中

见下图:

红色区域不能分配给任何工具栏,否则它将不会按照您想要的方式对齐。我想,在这里,对齐对你没有帮助。因此,我看到的唯一解决方案是使用GtkTable。此外,在GTK3中,GtkHBox和GTKVOX以及GtkTable都已被弃用,取而代之的是GtkGrid,它的工作原理或多或少类似于GtkTable