Скрытие sizer и всего его содержимого в wxWidgets с использованием XRC
Я использую файл.xrc для настройки моего графического интерфейса wxWidgets. Для большинства элементов графического интерфейса я могу указать<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>
Можно ли это скрыть? wxStaticBoxSizer
из файла.xrc?
2 ответа
Быстрый взлом: гнездо 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);
Вот и все. Перестройте библиотеку, и теперь вы можете указать <hideitems>1</hideitems>
на сортировщике, что означает, что он будет создан со всеми скрытыми элементами.
Это будет обрабатывать все размеры, кроме wxStdDialogButtonSizer
, который имеет отдельный код. Я проверил это для wxBoxSizer
а также wxStaticBoxSizer
используя образец XRC. Я думаю, что отправлю запрос на удаление, чтобы добавить эту функцию в wx; в то же время, если бы кто-нибудь мог провести еще какое-то тестирование с использованием более крупного приложения, это было бы здорово.
В настоящее время нет способа скрыть sizer в XRC, лучшее, что вы можете сделать, это вызвать wxSizer:: ShowItems () из кода. Вероятно, в будущем было бы целесообразно поддерживать атрибут "скрытый" для классификаторов, хотя его, вероятно, следует называть как-нибудь иначе, чтобы не создавать ошибочное впечатление, что классификаторы - это окна (а они - нет).
Кстати, если бы вы попытались подтвердить свой XRC, вы бы узнали, что "скрытый" элемент здесь не разрешен.