使用XRC将sizer及其所有内容隐藏在wxWidgets中

时间:2015-09-21 14:36:15

标签: c++ visibility wxwidgets xrc

我正在使用.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

2 个答案:

答案 0 :(得分:3)

快速入侵:将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上指定<hideitems>1</hideitems>,这意味着它将被隐藏所有项目。

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

答案 1 :(得分:2)

目前无法在XRC中隐藏sizer,您可以做的最好是从代码中调用wxSizer::ShowItems()。支持隐藏的&#34;可能是有意义的。虽然它可能被称为其他东西以避免产生错误的印象,即sizer是windows(他们不是这样)。

顺便说一句,如果你试图validate你的XRC,你会发现&#34;隐藏&#34;这里不允许使用元素。