使用 XRC 在 wxWidgets 中隐藏一个 sizer 及其所有内容
Hiding a sizer and all its contents in wxWidgets using 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
?
目前无法在 XRC 中隐藏 sizer,最好的办法是从代码中调用 wxSizer::ShowItems()。将来支持 sizer 的 "hidden" 属性也可能是有意义的,尽管它可能应该被称为其他东西以避免造成 sizer 是 windows 的错误印象(它们不是).
顺便说一句,如果您尝试 validate 您的 XRC,您会发现此处不允许使用 "hidden" 元素。
快速破解:将 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);
就是这样。重建库,现在您可以在 sizer 上指定 <hideitems>1</hideitems>
,这意味着它将在创建时隐藏所有项目。
这将处理除 wxStdDialogButtonSizer
之外的所有 sizer,它有单独的代码。我使用 XRC 示例测试了 wxBoxSizer
和 wxStaticBoxSizer
。我想我会发送一个拉取请求以将此功能添加到 wx;与此同时,如果有人可以使用更大的应用程序对此进行更多测试,那就太好了。
我正在使用 .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
?
目前无法在 XRC 中隐藏 sizer,最好的办法是从代码中调用 wxSizer::ShowItems()。将来支持 sizer 的 "hidden" 属性也可能是有意义的,尽管它可能应该被称为其他东西以避免造成 sizer 是 windows 的错误印象(它们不是).
顺便说一句,如果您尝试 validate 您的 XRC,您会发现此处不允许使用 "hidden" 元素。
快速破解:将 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);
就是这样。重建库,现在您可以在 sizer 上指定 <hideitems>1</hideitems>
,这意味着它将在创建时隐藏所有项目。
这将处理除 wxStdDialogButtonSizer
之外的所有 sizer,它有单独的代码。我使用 XRC 示例测试了 wxBoxSizer
和 wxStaticBoxSizer
。我想我会发送一个拉取请求以将此功能添加到 wx;与此同时,如果有人可以使用更大的应用程序对此进行更多测试,那就太好了。