Gtk Z排序混乱

时间:2019-07-31 09:27:31

标签: gtk gtk2 z-order

我具有以下小部件结构: w: GtkWindow f: GtkFixed da: GtkDrawingArea cf: GtkFixed cda: GtkDrawingArea i: GtkIcon s1: GtkAdjustment s2: GtkAdjustment 它们按插入顺序列出(所有其他版本的gtk_container_add插入w,gtk_fixed_put)。 cf在所有小部件放置和调整大小后完全重叠da; cda,i,s1和s2不重叠并覆盖连续区域。 暴露此结构后,从上到下的出现顺序如下: cda over da over s1, s2, i

da被屏蔽以仅接收暴露信号; da在视觉上遮盖了s1和s2,但鼠标事件由s1和s2发送和处理-该事件有点“掉线” da。

这到底是什么? Gtk怎么会在兄弟姐妹容器小部件内以及兄弟姐妹的子孙之间粘住东西?(这使我的侄子和小弟弟哈哈:)

我想要得到的是da成为窗口w的“背景”;最终会将几个同级GtkFixed插入到f中,它们之间可能有一些间隙,我需要在背景da上绘制,我对da的某些部分被其他小部件遮盖住完全满意。我不想为每个间隙创建多个DrawingAreas。

我猜我要描述的是通常的Z顺序,由于某种原因,这种情况在我的情况下不起作用。哦,我一定要使用Gtk 2。

2 个答案:

答案 0 :(得分:0)

如果您使用GtkFixed,则应获得“该死的”行为。永远不要使用它!它破坏了可访问性。它违反了UI设计规则。嵌套它们是一场噩梦。您的朋友会抛弃您,您的狗会在拖鞋中留下diarohea。如果您想违背现代编码惯例,请使用GOTO或动态修改您的代码段,而永远不要使用GtkFixed。

答案 1 :(得分:0)

由于没有一位专家能够解决我的新手问题,所以我必须成为一位专家,自己研究资料并制定解决方案。在这里。

问题在于,在Gtk中,窗口小部件结构与窗口结构不对应。默认情况下,GtkFixed没有相应的窗口,因此在我的示例中,窗口结构如下:

w: GtkWindow f: GtkFixed (* no window *) da: GtkDrawingArea cf: GtkFixed (* no window *) cda: GtkDrawingArea i: GtkIcon s1: GtkAdjustment s2: GtkAdjustment

基本上是平坦的。因此,所有窗口小部件窗口都以任意顺序插入到w.window中,这导致 da 在其“侄子”之间显示。

因此,解决方案是告诉GtkFixed具有自己的窗口:

cf := gtk_fixed_new(); gtk_widget_set_has_window(cf, 1)

相关问题