Скрытие 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; в то же время, если бы кто-нибудь мог провести еще какое-то тестирование с использованием более крупного приложения, это было бы здорово.

3

Другие решения

В настоящее время в XRC нет способа скрыть свой классификатор, лучше всего позвонить wxSizer :: ShowItems () из кода. Вероятно, в будущем было бы целесообразно поддерживать атрибут «скрытый» для классификаторов, хотя его, вероятно, следует называть как-нибудь иначе, чтобы не создавать ошибочное впечатление, что классификаторы — это окна (а они — нет).

Кстати, если вы пытались утверждать на вашем XRC вы бы узнали, что «скрытый» элемент здесь запрещен.

2

По вопросам рекламы [email protected]