【问题标题】:Gtk Z-ordering messGtk Z 排序混乱
【发布时间】:2019-12-08 18:44:48
【问题描述】:

我有以下小部件结构: w: GtkWindow f: GtkFixed da: GtkDrawingArea cf: GtkFixed cda: GtkDrawingArea i: GtkIcon s1: GtkAdjustment s2: GtkAdjustment 它们按插入顺序列出(gtk_container_add 插入 w,gtk_fixed_put 用于所有其他 isertions)。在放置和调整所有小部件后,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 的某些部分被其他小部件遮挡。我不想为每个间隙创建多个 DrawingArea。

我想我所描述的是通常的 Z 排序,由于某种原因在我的情况下不起作用。哦,我一定会使用 Gtk 2。

【问题讨论】:

    标签: gtk gtk2 z-order


    【解决方案1】:

    由于没有大师能够解决我的新手问题,我不得不成为一名大师,自己研究资源并制定解决方案。在这里。

    问题是在Gtk中,widget结构与window结构不对应。默认情况下,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)

    【讨论】:

      【解决方案2】:

      如果你使用 GtkFixed 那么你应该得到“什么鬼”的行为。永远不要使用它!它破坏了可访问性。它打破了 UI 设计规则。嵌套它们是一场噩梦。你的朋友会否认你,你的狗会在你的拖鞋里留下腹泻。如果您想挑战现代编码实践,请使用 GOTO 或动态修改您的代码段,千万不要使用 GtkFixed。

      【讨论】:

      • Paul,在知道我为什么选择使用 GtkFixed 之前,你判断得太快了。至于“现代编码实践” - 他们见鬼去吧!不管它们是什么,它们都会使程序变胖!我正在扩展一个功能齐全的文本编辑器和 IDE(编译器 + 调试器 + 链接器),它在 1MB 或 RAM(是的,MB,不是 GB!)下运行 - 现代系统提供相同的功能,但消耗了数千次(字面意思! ) 更多资源。
      • 在我看来,Gtk 与 Z 顺序无关。在文档中的某个地方故意明确地声明它是一种很好的编程习惯,而不是提供一个小部件并强烈反对使用它!我已经阅读了所有反对使用 GtkFixed 的注意事项,但没有任何具体内容足以说明没有 Z 顺序的概念。
      • 事实上,我只是好奇你必须在实现中使用什么样的现代编码实践来显示(“映射”)一个小部件,它是兄弟姐妹的孩子!简单的动态列表或数组是不够的——你必须比这更狡猾!而且,展示和鼠标事件的处理方式显然不同。哇!!不,我会坚持使用旧的编程实践,即让它尽可能简单,但不要更简单。这至少有 100 年的历史。回到爱因斯坦。
      • 好吧,使用 vim。仅加载 GTK+(即使在其版本 2 中)及其所有依赖项可能已经加载超过 1MB。
      • @liberforce 同意。如果你想降低内存,GTK 和 Qt 不是要走的路。如果你想说“Gtk、可访问性以及小屏幕用户将无法看到你的取消按钮这一事实见鬼去吧”,那么完全绕过显示管理器并用 X11 之类的东西编写它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      相关资源
      最近更新 更多