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

StackOverflow https://stackoverflow.com/questions/182739

Вопрос

Я использую конструктор 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 и реализуете эти функции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top