Можно ли перечислить дочерние элементы wxFrame в wxWidgets?
-
06-07-2019 - |
Вопрос
Я использую конструктор wxGlade для создания графического интерфейса для небольшого приложения. Он генерирует класс, унаследованный от wxFrame, который является основным окном приложения. Чтобы облегчить обслуживание, я бы хотел избежать написания дополнительного кода в этом сгенерированном классе.
Но все виджеты, созданные с помощью wxGlade, фактически создаются в автоматически сгенерированном методе do_layout (), и получить к ним доступ за пределами области действия этого сгенерированного метода в сгенерированном классе невозможно.
Есть ли способ получить указатель определенного виджета вне этого сгенерированного класса - по имени, по типу, путем перечисления потомков или чего-то в этом роде?
Решение
Все классы, унаследованные от wxWindow (одним из них является wxFrame), имеют функцию " GetChildren " ;, который возвращает список дочерних окон, которые затем можно перечислить. Если вы ищете конкретное поле по имени, используйте " FindWindow & Quot; функция. р>
Другие советы
На самом деле я нашел ответ сам:
wxWindowList & children = myframe->GetChildren();
for ( wxWindowList::Node *node = children.GetFirst(); node; node = node->GetNext() )
{
wxWindow *current = (wxWindow *)node->GetData();
// .. do something with current
}
Могу я порекомендовать вам попробовать wxFormBuilder . Я также использовал wxGlade и раньше, но он накладывает слишком много ограничений на то, как вы его используете. Например, с помощью wxFormBuilder вы можете выбрать «видимость» (публичную, защищенную, приватную) для каждого элемента управления в форме. Он также может генерировать виртуальные функции для обработчиков событий, поэтому вы просто выводите свой класс из сгенерированного класса wxFormBuilder и реализуете эти функции.