【问题标题】:Second wxToolbar is not shown under LinuxLinux下不显示第二个wxToolbar
【发布时间】:2022-01-19 10:50:54
【问题描述】:

基于工具栏示例,我在我的应用程序中添加了第二个工具栏:

g_toolBar2=new wxToolBar(g_custFrame, wxID_ANY,
                         wxDefaultPosition,wxDefaultSize,
                         wxTB_FLAT|wxTB_DOCKABLE|wxTB_TEXT|wxTB_RIGHT);
<add tools here>
g_toolBar2->Realize();

除此之外,在大小事件中,底层元素被移动/调整大小以不与此工具栏重叠。

此代码在 Windows 上运行良好,我可以看到我的工具栏停靠在上方水平工具栏的右侧下方

在 Linux 下有一个问题:我可以看到第二个工具栏应该出现的灰色垂直条,但没有任何工具。但是当我取消停靠此工具栏时(或者更好的是:当我取消停靠此灰色条时),所有工具都在浮动工具栏中可用。

知道 Linux 中可能有什么不同吗?

谢谢!

【问题讨论】:

  • 什么wx版本?样品适合您吗? undocking 是什么意思?
  • @Igor wx 3.0(Ubuntu 附带的版本)和“取消停靠”意味着单击工具栏并将其从父框架中拉开(由于 wxTB_DOCKABLE)
  • 样品对你有用吗?
  • @Igor:示例在左侧显示第二个垂直工具栏,而问题出现在右侧。
  • 样本有一个菜单项可以将其放置在右侧。

标签: wxwidgets


【解决方案1】:

我同时找到了问题的原因:

在 wxWidgets 中创建额外的工具栏包括两部分:

  • 工具栏本身的创建,这里不是第一个工具栏的任何工具栏,不是通过 SetToolBar() 添加的
  • 更改底层 UI 元素的布局,以便附加工具栏不会以奇怪的方式与它们重叠;在工具栏示例中,这是在 LayoutChildren() 中完成的

这个 LayoutChildren() 是问题所在:为了计算底层元素,需要工具栏本身的大小,该大小是通过 GetSize() 获取的。使用 Windows 可以正常工作并返回工具栏大小。使用 Linux 时,工具栏的返回宽度始终为 2。所以这里必须强制工具栏为更合理的大小。

我只是获取了第一个工具栏的高度并使用它来设置第二个工具栏的 idth。

【讨论】:

  • 在 Linux/GTK 中,在实现/绘制任何东西之前,您不知道任何东西的大小。那里有很多因素在起作用,所以总的来说,你的解决方案似乎很好。是的 - 如示例中所示,TLW 仅管理一个工具栏,甚至在文档中的某处进行了解释。
猜你喜欢
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
相关资源
最近更新 更多