É possível enumerar as crianças wxFrame em wxWidgets?
-
06-07-2019 - |
Pergunta
Eu estou usando o designer wxGlade para gerar a GUI para uma pequena aplicação. Ele gera uma classe, herdada de wxFrame, que é a janela principal do aplicativo. Para facilitar a manutenção, eu gostaria de evitar escrever código adicional nesta classe gerada.
Mas todos os widgets criados com o wxGlade são realmente criadas no do_layout método de auto-gerado () e não é possível acessá-los fora do escopo desse método gerado na classe gerada.
Existe uma maneira de obter ponteiro de certos fora widget que classe gerada? - por nome, tipo, enumerando as crianças ou algo assim
Solução
Todas as classes herdadas de wxWindow (wxFrame sendo um deles) têm uma função " GetChildren ", que retorna uma lista de janelas filho, que você pode enumerar sobre. Se você estiver procurando por um campo específico por nome, em seguida, usar o " FindWindow " função.
Outras dicas
Na verdade, eu encontrei a resposta me:
wxWindowList & children = myframe->GetChildren();
for ( wxWindowList::Node *node = children.GetFirst(); node; node = node->GetNext() )
{
wxWindow *current = (wxWindow *)node->GetData();
// .. do something with current
}
Maio eu recomendo que você tente wxFormBuilder . Eu também usei wxGlade antes, mas apresenta demais restrições sobre como usá-lo. Por exemplo, com wxFormBuilder você pode selecionar 'visibilidade' (público, protegido, privado) para cada controle no formulário. Ele também pode gerar funções virtuais para manipuladores de eventos, então você apenas derivar a classe de wxFormBuilder classe gerada e implementar essas funções.