Pregunta

Estoy usando el diseñador wxGlade para generar la GUI para una pequeña aplicación. Genera una clase, heredada de wxFrame, que es la ventana principal de la aplicación. Para facilitar el mantenimiento, me gustaría evitar escribir código adicional en esta clase generada.

Pero todos los widgets creados con wxGlade se crean realmente en el método autogenerado do_layout () y no es posible acceder a ellos fuera del alcance de ese método generado en la clase generada.

¿Hay alguna forma de obtener el puntero de cierto widget fuera de esa clase generada, por nombre, por tipo, enumerando los elementos secundarios o algo así?

¿Fue útil?

Solución

Todas las clases heredadas de wxWindow (wxFrame es una de ellas) tienen una función " GetChildren " ;, que devuelve una lista de ventanas secundarias que luego puede enumerar. Si está buscando un campo específico por nombre, utilice el " FindWindow " función.

Otros consejos

En realidad, encontré la respuesta:

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

     // .. do something with current
}

¿Puedo recomendarle que pruebe wxFormBuilder . También usé wxGlade antes, pero presenta demasiadas restricciones sobre cómo lo usas. Por ejemplo, con wxFormBuilder puede seleccionar 'visibilidad' (pública, protegida, privada) para cada control en el formulario. También puede generar funciones virtuales para controladores de eventos, por lo que simplemente deriva su clase de la clase generada por wxFormBuilder e implementa esas funciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top