使用 XRC 在 wxWidgets 中隐藏大小调整器及其所有内容

Hiding a sizer and all its contents in wxWidgets using XRC

本文关键字:调整器 XRC wxWidgets 隐藏 使用      更新时间:2023-10-16

我正在使用一个.xrc文件来设置我的wxWidgets GUI。对于大多数 GUI 元素,我可以指定<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

快速技巧:将大小器嵌套在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);

就是这样。重新生成库,现在您可以在大小调整器上指定<hideitems>1</hideitems>,这意味着它将在创建时隐藏其所有项目。

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

目前无法在XRC中隐藏大小器,您能做的最好的事情就是从代码中调用wxSizer::ShowItems((。将来支持大小器的"隐藏"属性可能是有意义的,尽管它可能应该被称为其他东西,以避免造成大小器是窗口的错误印象(它们不是(。

顺便说一句,如果您尝试验证您的 XRC,您会发现这里不允许使用"隐藏"元素。