Linux 下未显示第二个 wxToolbar

Second wxToolbar is not shown under Linux

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

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

除此之外,在尺寸事件中,底层元素 moved/sized 不与此工具栏重叠。

此代码与 Windows 配合使用时效果很好,我可以看到我的工具栏停靠在上方水平工具栏的右侧

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

知道 Linux 有什么不同吗?

谢谢!

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

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

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

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

我简单地获取了第一个工具栏的高度并使用它来设置第二个工具栏的 ID。