【问题标题】:Hiding a sizer and all its contents in wxWidgets using XRC使用 XRC 在 wxWidgets 中隐藏 sizer 及其所有内容
【发布时间】:2015-09-21 14:36:14
【问题描述】:

我正在使用 .xrc 文件来设置我的 wxWidgets GUI。 For most GUI elements I can specify <hidden>1</hidden> 并且该元素不会被绘制。

我想要的是能够隐藏我的wxStaticBoxSizer 并使其内容不被绘制。

设置如下,但是添加<hidden>1</hidden>没有任何效果。静态框仍然像它包含的所有内容一样绘制。

<object class="wxStaticBoxSizer" name="wxID_ANY">
    <orient>wxVERTICAL</orient>
    <label>Flight Formation</label>
    <object class="sizeritem">
    <flag>wxGROW|wxALL</flag>
    <border>10</border>
    <option>1</option>

是否可以从 .xrc 文件中隐藏此 wxStaticBoxSizer

【问题讨论】:

  • 由于sizer 在XRC 中似乎没有该属性,我会尝试将sizer 嵌套在wxPanel 中并隐藏面板。这对你有用吗?
  • @bogdan 是的,嵌套它是我的解决方案。但它肯定看起来像一个黑客。代替其他答案,这可能是正确的答案。如果您想输入,我会接受。
  • 你准备好进行黑客攻击了吗?通过一个非常简单的补丁(一个文件中的两行代码),您可以获得所需的内容,但您必须重新构建 XRC 库。感兴趣的?如果你能在一个真实的项目中测试它会很有用(我只使用 wx 的 XRC 示例对wxBoxSizerwxStaticBoxSizer 进行了测试)。
  • @bogdan 不撒谎,这听起来很吓人。我正在使用股票 wxWidgets,我想我更愿意保持这种状态。也就是说,如果您愿意将其写成可能对未来读者非常有帮助的答案。
  • 我已经发送了 pull request 并进行了必要的更改。运气好的话,该功能可能会出现在未来的版本中。

标签: c++ visibility wxwidgets xrc


【解决方案1】:

快速破解:将 sizer 嵌套在 wxPanel 中并隐藏面板。


如果您愿意重建 XRC 库,这里有一个快速补丁可以提供您需要的功能。

src/xrc/xh_sizer.cpp中,在wxSizerXmlHandler::Handle_sizer()的正文中,在对CreateChildren(parent, true/*only this handler*/);的调用之后添加以下内容:

// This has to be done after CreateChildren().
if(GetBool(wxT("hideitems"), 0) == 1)
   sizer->ShowItems(false);

就是这样。重建 lib,现在您可以在 sizer 上指定 &lt;hideitems&gt;1&lt;/hideitems&gt;,这意味着它将在创建时隐藏所有项目。

这将处理除wxStdDialogButtonSizer 之外的所有sizer,它有单独的代码。我使用 XRC 样本测试了 wxBoxSizerwxStaticBoxSizer。我想我会发送一个拉取请求来将此功能添加到 wx;同时,如果有人可以使用更大的应用程序对此进行更多测试,那就太好了。

【讨论】:

  • 感谢您的 PR,现在是 merged,因此如果您使用的是最新的 master(或者可以等待 3.1.0 版本),则不必再手动重建 XRC .
【解决方案2】:

目前没有办法在 XRC 中隐藏 sizer,你能做的最好的就是在代码中调用wxSizer::ShowItems()。将来支持 sizer 的“hidden”属性可能也是有意义的,尽管它可能应该被称为其他东西以避免产生 sizer 是窗口(它们不是窗口)的错误印象。

顺便说一句,如果您尝试 validate 您的 XRC,您会发现此处不允许使用“隐藏”元素。

【讨论】:

  • &lt;hideitems&gt;,也许?
猜你喜欢
  • 1970-01-01
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
相关资源
最近更新 更多