[C con Clase] gtk label set text no me funciona
Steven Davidson
srd4121 en njit.edu
Mar Oct 18 01:59:50 CEST 2011
Hola Hl3,
2011/10/17 Hl3 <halowin3 en gmail.com>:
>
> SD> No es nada aconsejable definir variables globales y deberías intentar
> SD> no usarlas. En tu programa, puedes pasar el puntero a 'GtKWidget' como
> SD> parámetro a la función 'clik()' a través del parámetro local, 'data'
> SD> de tipo 'gpointer'. Esto se hace pasando la etiqueta al registrar la
> SD> señal de "clicked".
>
>
> Ok, Steven eso fue lo que hice en primera instancia y me pareción mas "elegante" pero te hago una pregunta: ¿ Si tivieras que cambiarle el texto a dos o mas
> etiquetas ...? ya no puedes usar el gpointer al data ????
> (no se si me explico) a ver como solucionamos esto para el caso de 2 o mas.
>
Entonces, o bien crea una estructura para agrupar todos esos punteros,
o bien crea un array de punteros. Por ejemplo,
struct etiquetas_varias
{
GtKWidget *label1;
GtKWidget *label2;
GtKWidget *label3;
GtKWidget *label4;
};
...
struct etiquetas_varias stMisEtiquetas;
...
g_signal_connect( G_OBJECT (boton), "clicked", G_CALLBACK (clik),
(gpointer)&stMisEtiquetas );
Así pasamos un puntero a 'struct etiquetas_varias' e internamente
tendremos acceso a la estructura y a cada etiqueta contenida.
La otra opción es con un array de punteros; por ejemplo,
GtkWidget *lista_etiquetas[100];
...
g_signal_connect( G_OBJECT (boton), "clicked", G_CALLBACK (clik),
(gpointer)lista_etiquetas );
Recuerda que en 'clik()', tendrías que hacer un cásting a un puntero
doble a 'GtKWidget'.
Por otro lado, podríamos crear un array dinámico, por lo que nos
interesaría usar 'g_signal_connect_data()', para invocar básicamente a
un "destructor", en términos de POO, y así liberar la memoria creada
para el array dinámico.
Espero que esto te oriente.
Steven
Más información sobre la lista de distribución Cconclase