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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top