ProgramacionGTKenC/CapituloVIII

De Wiki GNOME Chile
(Diferencias entre revisiones)
Saltar a: navegación, buscar
 
(Señales)
Línea 19: Línea 19:
 
Antiguamente (y en varios ejemplos antiguos) se ve que la funcion se llamaba gtk_signal_connect(). Esta es una funcion que se depreco desde la version 2.x de GTK+.
 
Antiguamente (y en varios ejemplos antiguos) se ve que la funcion se llamaba gtk_signal_connect(). Esta es una funcion que se depreco desde la version 2.x de GTK+.
  
No crean que es la unica señal que es capaz de recibir el boton. Para eso, hay que entender un poco la jerarquia de objetos de GTK+.
+
No crean que es la unica señal que es capaz de recibir el boton (ni otros widgets). Antes de continuar, hay que entender un poco la jerarquia de objetos de GTK+.
  
 
=== Objetos ===
 
=== Objetos ===

Revisión de 06:28 5 sep 2006

Conceptos avanzados en GTK+

Hemos quedado con un monton de dudas hasta el momento acerca de algunos de los ejemplos presentados anteriormente.

Cubramos cada uno de ellos aqui, de menor a mayor complejidad.

Señales

Habiamos visto que cada uno de los widgets recibe (y emite) señales. Estas son tomadas por el subsistema de GTK+ y ejecuta las funciones pertinentes, permitiendo que los programas dejen de ser aburridos y ejecuten mas acciones, con o sin la ayuda del usuario.

Una señal que se ha visto seguido es la asociada al widget boton:

g_signal_connect ((GObject *) boton_n,"clicked", (GCallback * ) funcion_n, NULL);

esto es que la funcion "funcion_n" es ejecutada al momento de hacer clic en el boton "boton_n".

Antiguamente (y en varios ejemplos antiguos) se ve que la funcion se llamaba gtk_signal_connect(). Esta es una funcion que se depreco desde la version 2.x de GTK+.

No crean que es la unica señal que es capaz de recibir el boton (ni otros widgets). Antes de continuar, hay que entender un poco la jerarquia de objetos de GTK+.

Objetos

Habia dicho de un principio que todos los widgets son herencia de GObject, y a GtkWidget, y esta es una de las razones que la declaracion de los widgets en codigo pueda ser:

GtkWidget * widget1;
GtkWidget * widget2;
...

Ser "hijos" de GObject les permite, por ejemplo, la emision y recepcion de señales (de ahi la funcion g_object_signal).

Los GObjects es el tipo fundamental para los atributos y objetos en GTK+. Esto permite tener una serie de fundaciones (funciones base) para la construccion de objetos, acceso a metodos y soporte de señales.

Un GObject posee solo cuatro funciones basicas:

  • get_property()
  • set_property()
  • dispose()
  • finalize()

Solo nos centraremos en las primeras dos.

Habiamos visto hace algunas entregas atras que podemos cambiar algunas propiedades de los widgets.

Un ejemplo simple:

gtk_window_set_title((GtkWindow *) ventana, "titulo de la ventana");

Esto solo cambia el titulo de la ventana a "titulo de la ventana".

Revisando un poco la documentacion de GTK+, se puede ver que el widget de ventana posee la propiedad "title" (titulo). Esta la podemos cambiar con la funcion anterior (gtk_window_set_title). Pero como un widget es un GObject, podemos cambiar la propiedad "title" usando una funcion de GObject:

g_object_set_property((Gobject *) ventana, "title", "titulo de la ventana");

Ademas, las funciones de GObject nos permiten cambiar multiples propiedades de un widget!

g_object_set((GObject *) ventana, 
                         "title", "titulo de la ventana",
                         "default-height", 100,
                         "default-width", 200,
                         "accept-focus", TRUE,
                         "destroy-with-parent", TRUE,
                         NULL);

La unica señal que puede recibir un GObject es "notify", que es usada para emitir advertencias acerca de propiedades no esperadas o no soportadas por el objeto. Por ejemplo, si queremos preguntar por "title" en un widget de boton.

Herramientas personales
Espacios de nombres

Variantes
Acciones
Navegación
Herramientas