Frage

Ich bin mit dem wxGlade Designer die GUI für eine kleine Anwendung zu generieren. Es erzeugt eine Klasse, von wxFrame geerbt, die das Hauptanwendungsfenster ist. Um die Wartung zu erleichtern, würde Ich mag zusätzlichen Code in dieser generierten Klasse zu vermeiden, zu schreiben.

Aber alle Widgets mit dem wxGlade erstellt werden tatsächlich in der automatisch generierten Methode do_layout () erstellt, und es ist nicht möglich, sie nicht in den Anwendungsbereich dieser erzeugten Methode in der generierten Klasse zuzugreifen.

Gibt es eine Möglichkeit Zeiger bestimmten Widget außerhalb dieser generierten Klasse zu erhalten - nach Namen, Typ, indem Sie die Kinder oder etwas wie das Aufzählen

?
War es hilfreich?

Lösung

Alle geerbten Klassen von wxWindow (wxFrame ist einer von ihnen) eine Funktion „ GetChildren “, die eine Liste von untergeordneten Fenster zurückgibt, die Sie dann über aufzählen kann. Wenn Sie für ein bestimmtes Feld nach Namen suchen, dann verwenden Sie die „ Find “ Funktion.

Andere Tipps

Eigentlich fand ich die Antwort selbst:

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

     // .. do something with current
}

Darf ich empfehlen Sie versuchen, wxFormBuilder . Ich wxGlade auch vor verwendet, aber es stellt zu viele Einschränkungen, wie Sie es verwenden. Zum Beispiel mit wxFormBuilder können Sie wählen, ‚Sichtbarkeit‘ (öffentlich, geschützt, privat) für jedes Steuerelement auf dem Formular. Es kann auch virtuelle Funktionen für Event-Handler erzeugen, so dass Sie nur leiten Sie Ihre Klasse von wxFormBuilder Klasse erzeugt und diese Funktionen implementieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top