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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top