[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