Скрытие 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, вы бы узнали, что "скрытый" элемент здесь не разрешен.

Другие вопросы по тегам