我有一个很难描述的简单问题。
我的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);
我真的很想知道我的问题是否可以解决。我想我正在根据一个元素的位置(绘图区域)定义两个容器(或元素,按钮栏)的位置,我不知道是否可能。
非常感谢。
答案 0 :(得分:2)
您可以使用2x2 GtkTable并保持左下角的单元格为空。
答案 1 :(得分:2)
正如约翰内斯所说,你应该使用GtkTable。问题是,在尺寸计算中,左下角的空间将始终考虑在内,无论是在HBox还是VBox中。因此,您的工具栏中没有任何工具栏应该放在那里扩展的容器中。
看到这张图:
红色区域无法分配给任何工具栏,否则将无法按照您想要的方式对齐。我认为对齐不会帮助你。所以我看到的唯一解决方案是使用GtkTable。此外,在GTK3中,GtkHBox和GtkVBox已被弃用,以及GtkTable,并被GtkGrid取代,GtkGrid或多或少与GtkTable一样。