Haskell 如何显示GTK工具栏中ToolItems的溢出菜单
GTKHaskell 如何显示GTK工具栏中ToolItems的溢出菜单,haskell,gtk,gtk3,gtk2,Haskell,Gtk,Gtk3,Gtk2,GTK工具栏在工具栏宽度不足以显示其内容时会显示溢出菜单 如果工具栏包含由ToolItems包装的ComboBoxes,则此功能似乎不起作用 这是一个证明问题的例子。它是用Haskell写的,但我想把它翻译成其他语言应该不会太难 有关建立回购协议的说明,请参见 最后一个命令打开一个小的GTK窗口。如果将其放大,您将在窗口中看到两个组合框。问题是,如果将窗口缩小一点,即使启用了toolbarShowArrow,右侧的组合框也会消失,并且不会出现溢出菜单 (不幸的是,我没有足够的声誉,所以在这里发布
工具栏
在工具栏宽度不足以显示其内容时会显示溢出菜单
如果工具栏包含由ToolItem
s包装的ComboBox
es,则此功能似乎不起作用
这是一个证明问题的例子。它是用Haskell写的,但我想把它翻译成其他语言应该不会太难
有关建立回购协议的说明,请参见
最后一个命令打开一个小的GTK窗口。如果将其放大,您将在窗口中看到两个组合框。问题是,如果将窗口缩小一点,即使启用了toolbarShowArrow
,右侧的组合框也会消失,并且不会出现溢出菜单
(不幸的是,我没有足够的声誉,所以在这里发布了两个截图,所以我将它们上传到了回购协议上。)
有趣的是,例如,如果我将工具栏
的内容从工具项
s更改为工具按钮
s,我会得到溢出菜单
我还用3个软件包对此进行了测试:gtk
用于GTK2,gtk3
用于gtk3,以及gi gtk
用于gtk3的gobject内省。他们都有相同的问题
所以问题是:这个问题有什么解决办法吗?文档中说明:
设置当工具栏上没有空间容纳所有项目时,是否显示溢出菜单。如果TRUE
,则没有空间的项目通过溢出菜单可用
所以,这是一个“溢出菜单”。我不会绕道进入GTK+源代码,但我只想说:添加到工具栏的项目需要提供菜单项,以显示在其溢出菜单中。现在听起来合乎逻辑,对吧D
工具按钮
之所以有效,是因为它们使用专门为此目的创建的菜单项调用set\u proxy\u menu item()
这就是Toolbar
在决定项目是否会溢出时所寻找的:proxyMenuItem
s,它可以将其放入溢出菜单中,并且只有当它找到至少一个时,才有必要给出箭头以打开该菜单
因此,如果您有其他小部件,您可以通过在工具项
上设置代理菜单项,将它们放入溢出菜单,方法如下:
- 只需调用以设置特定项
- 连接到
::在工具项
上创建菜单代理
信号,并在每次发射期间决定是否设置(或清除)代理项
当然,您还需要连接::在菜单项
上激活
,以执行与原始工具项
相关的适当操作
…不过,如果最终的工具项
子项是一个组合框
,那么是否可以从菜单项
中执行任何有用的操作则是另一个问题。它不会将其弹出菜单公开为您可以使用的内容。我想你可以在菜单项中添加一个重复的组合框
,并将其用作你的代理。。。但在这种情况下,很可能您超出了溢出菜单的功能范围,应该确保您的工具栏
不会变得太小而丢失此类控件
也许不是!试一试,看看效果如何