Можно ли перечислить дочерние элементы wxFrame в wxWidgets?

Я использую конструктор wxGlade для создания графического интерфейса для небольшого приложения. Он генерирует класс, унаследованный от wxFrame, который является основным окном приложения. Чтобы облегчить обслуживание, я бы хотел избежать написания дополнительного кода в этом сгенерированном классе.

Но все виджеты, созданные с помощью wxGlade, фактически создаются в автоматически сгенерированном методе do_layout(), и получить к ним доступ за пределами этого сгенерированного метода в сгенерированном классе невозможно.

Есть ли способ получить указатель определенного виджета за пределами этого сгенерированного класса - по имени, по типу, перечисляя потомков или что-то в этом роде?

3 ответа

Решение

Все классы, унаследованные от wxWindow (одним из них является wxFrame), имеют функцию " GetChildren", которая возвращает список дочерних окон, которые затем можно перечислить. Если вы ищете конкретное поле по имени, используйте функцию " FindWindow".

На самом деле я нашел ответ сам:

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 и реализуете эти функции.

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