Можно ли перечислить дочерние элементы wxFrame в wxWidgets? - PullRequest
2 голосов
/ 08 октября 2008

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

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

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

Ответы [ 3 ]

3 голосов
/ 08 октября 2008

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

1 голос
/ 08 октября 2008

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

wxWindowList & children = myframe->GetChildren();
for ( wxWindowList::Node *node = children.GetFirst(); node; node = node->GetNext() )
{
     wxWindow *current = (wxWindow *)node->GetData();

     // .. do something with current
}
0 голосов
/ 22 октября 2008

Могу я порекомендовать вам попробовать wxFormBuilder . Я также использовал wxGlade и раньше, но он накладывает слишком много ограничений на то, как вы его используете. Например, с помощью wxFormBuilder вы можете выбрать «видимость» (публичную, защищенную, приватную) для каждого элемента управления в форме. Он также может генерировать виртуальные функции для обработчиков событий, поэтому вы просто выводите свой класс из сгенерированного класса wxFormBuilder и реализуете эти функции.

...