È possibile enumerare i figli di wxFrame in wxWidgets?
-
06-07-2019 - |
Domanda
Sto usando il designer wxGlade per generare la GUI per una piccola applicazione. Genera una classe, ereditata da wxFrame, che è la finestra principale dell'applicazione. Per facilitare la manutenzione, vorrei evitare di scrivere codice aggiuntivo in questa classe generata.
Ma tutti i widget creati con wxGlade sono effettivamente creati nel metodo generato automaticamente do_layout () e non è possibile accedervi al di fuori dell'ambito di quel metodo generato nella classe generata.
C'è un modo per ottenere il puntatore di determinati widget al di fuori di quella classe generata - per nome, per tipo, enumerando i figli o qualcosa del genere?
Soluzione
Tutte le classi ereditate da wxWindow (tra cui wxFrame) hanno una funzione " GetChildren " ;, che restituisce un elenco di finestre secondarie che è possibile enumerare. Se stai cercando un campo specifico per nome, utilizza il " FindWindow " la funzione.
Altri suggerimenti
In realtà ho trovato la risposta da solo:
wxWindowList & children = myframe->GetChildren();
for ( wxWindowList::Node *node = children.GetFirst(); node; node = node->GetNext() )
{
wxWindow *current = (wxWindow *)node->GetData();
// .. do something with current
}
Posso consigliarti di provare wxFormBuilder . Ho anche usato wxGlade prima, ma presenta troppi vincoli su come lo usi. Ad esempio, con wxFormBuilder è possibile selezionare "visibilità" (pubblica, protetta, privata) per ciascun controllo nel modulo. Può anche generare funzioni virtuali per i gestori di eventi, quindi è sufficiente derivare la classe dalla classe generata da wxFormBuilder e implementare tali funzioni.