我有一个简单的问题,可能很难描述。
我的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);我真的很想知道我的问题是否可以解决。我想我是根据一个元素(绘图区域)的位置来定义两个容器(或元素,按钮栏)的位置,但我不知道这是否可行。
非常感谢。
发布于 2011-11-22 18:37:41
正如Johannes所说,你应该使用GtkTable。问题是,无论是在HBox中还是在VBox中,在计算大小时总是要考虑左下角的空间。所以你的工具栏都不应该放在一个可以展开的容器中。
请看这张图:

红色区域不能分配给你的任何工具栏,否则它不会按你想要的方式对齐。在这里,我认为对齐不会对你有帮助。因此,我看到的唯一解决方案就是使用GtkTable。此外,在GTK3中,GtkHBox和GtkVBox已被弃用,GtkTable也已弃用,取而代之的是GtkGrid,它的工作方式与GtkTable差不多。
发布于 2011-11-22 17:40:49
您可以使用2x2 GtkTable,并将左下角的单元格保留为空。
https://stackoverflow.com/questions/8223963
复制相似问题