Question

J'utilise le concepteur wxGlade pour générer l'interface graphique d'une petite application. Il génère une classe, héritée de wxFrame, qui est la fenêtre principale de l'application. Afin de faciliter la maintenance, j'aimerais éviter d'écrire du code supplémentaire dans cette classe générée.

Mais tous les widgets créés avec wxGlade sont réellement créés dans la méthode générée automatiquement do_layout () et il est impossible d'y accéder en dehors du champ d'application de cette méthode générée.

Est-il possible d’obtenir le pointeur de certains widgets en dehors de la classe générée - par nom, par type, en énumérant les enfants ou quelque chose du genre?

Était-ce utile?

La solution

Toutes les classes héritées de wxWindow (wxFrame étant l'une d'entre elles) ont une fonction " GetChildren " ;, qui renvoie une liste de fenêtres enfants sur lesquelles vous pouvez ensuite énumérer. Si vous recherchez un champ spécifique par son nom, utilisez l'option & FindWindow . " fonction.

Autres conseils

En fait, j'ai trouvé la réponse moi-même:

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

     // .. do something with current
}

Puis-je vous recommander d'essayer wxFormBuilder . J'ai déjà utilisé wxGlade auparavant, mais cela présente trop de contraintes sur la façon dont vous l'utilisez. Par exemple, avec wxFormBuilder, vous pouvez sélectionner "visibilité" (public, protégé, privé) pour chaque contrôle du formulaire. Il peut également générer des fonctions virtuelles pour les gestionnaires d’événements. Vous devez donc dériver votre classe de la classe générée par wxFormBuilder et implémenter ces fonctions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top