Download document (10.35 MB) - Escuela Superior de Informática ...
Download document (10.35 MB) - Escuela Superior de Informática ... Download document (10.35 MB) - Escuela Superior de Informática ...
66 Capítulo 3. Antecedentes, Estado de la CuestiónGTK WIDGET( w i d g e t )GTK OBJECT ( o b j e c t )GTK SIGNAL FUNC ( f u n c t i o n )GTK CONTAINER( c o n t a i n e r )GTK WINDOW( window )GTK BOX( box )Todos los widgets derivan de la clase base GtkObject. Esto significa que siempre se puedeusar un widget como argumento de una función, que acepte un objeto, realizando la conversiónde tipo GTK OBJECT().3.3.3 Funciones y retrollamadasLas señales son necesarias en la programación de aplicaciones con interfaz gráfica deusuario, debido a que el programa deber ser capaz de responder a las acciones que el usuariorealice. Si se mueve el ratón, se presiona un botón de la misma, se escribe un texto o se cierrauna ventana, puede enviarse una señal a una función de retrollamada de la aplicación. Dichaseñal puede ser una de las que la aplicación necesite gestionar.GTK es un toolkit (conjunto de herramientas) gestionadas mediante eventos. Esto quieredecir que un programa GTK queda “dormido” en gtk main() hasta que se recibe un evento,momento en el cual el control es transferido a la función encargada de tratarlo.En una aplicación GTK+, se están generando señales continuamente, pero la mayoría deellas son ignoradas. Por ejemplo, si se toma como ejemplo un botón, la aplicación tiene unaserie de señales específicas del botón para cuando el usuario pulsa el botón del ratón, lo libera,hace clic con el ratón, lo mueve sobre el botón o cuando el ratón abandona el botón. Otroswidgets son similares al widget del botón, y comparten que sólo una minoría de las señalesson útiles para el desarrollado de aplicaciones, siendo la mayoría de las señales ignoradas.Cuando es necesario tratar una señal, hay que asignar una retrollamada y asociarla con unwidget. Los widgets pueden registrar retrollamadas y una misma retrollamada puede registrarseante múltiples widgets.
3.3. Toolkits para Interfaces Gráficas de Usuario 67Hay un conjunto de señales que todos los widgets heredan, como por ejemplo, destroyy hay señales que son específicas de cada widget, como por ejemplo, la señal toggled de unbotón de selección.Para que un determinado widget haga algo útil, habrá que crear el controlador que recojala señal enviada por dicho widget, y se encargue de llamar a la función apropiada. Para haceresto se usa la siguiente función:g i n t g t k s i g n a l c o n n e c t ( GtkObject ∗ o b j e c t , g c h a r ∗name ,G tkSignalFunc func , g p o i n t e r f u n c d a t a ) ;donde el primer argumento es el widget que emite la señal, el segundo el nombre de laseñal que se quiere capturar, el tercero es la función a la que se debe llamar cuando se capturala señal y el cuarto, los datos que queremos pasarle a dicha función.La función especificada en el tercer argumento se denomina retrollamada (función de respuestao callback) y debe tener la forma siguiente:void c a l l b a c k f u n c ( GtkWidget ∗ widget , g p o i n t e r c a l l b a c k d a t a ) ;donde el primer argumento es un puntero al widget que emitió la señal, y el segundo unpuntero a los datos que son pasados a la función. Estos datos son los que se le pasan a travésdel último argumento de la función gtk signal connect(). Otra llamada usada con el mismopropósito que la anterior es:g i n t g t k s i g n a l c o n n e c t o b j e c t ( GtkObject ∗ o b j e c t ,g c h a r ∗name ,G tkSignalFunc func ,GtkObject ∗ s l o t o b j e c t ) ;Esta función es igual a la anterior, salvo en el último argumento, que en este caso es unpuntero a GtkObject. En este caso la retrollamada deberá ser de la siguiente forma:void c a l l b a c k f u n c ( GtkObject ∗ o b j e c t ) ;
- Page 40 and 41: 16 Capítulo 3. Antecedentes, Estad
- Page 42 and 43: Optical FlowRaúl Varas Martínez18
- Page 44 and 45: 20 Capítulo 3. Antecedentes, Estad
- Page 46 and 47: 22 Capítulo 3. Antecedentes, Estad
- Page 48 and 49: 24 Capítulo 3. Antecedentes, Estad
- Page 50 and 51: 26 Capítulo 3. Antecedentes, Estad
- Page 52 and 53: 28 Capítulo 3. Antecedentes, Estad
- Page 54 and 55: 30 Capítulo 3. Antecedentes, Estad
- Page 56 and 57: y =x2+ 2x+ 5mediante el polinomio d
- Page 58 and 59: 34 Capítulo 3. Antecedentes, Estad
- Page 60 and 61: 36 Capítulo 3. Antecedentes, Estad
- Page 62 and 63: 38 Capítulo 3. Antecedentes, Estad
- Page 64 and 65: 40 Capítulo 3. Antecedentes, Estad
- Page 66 and 67: 42 Capítulo 3. Antecedentes, Estad
- Page 68 and 69: 44 Capítulo 3. Antecedentes, Estad
- Page 70 and 71: 46 Capítulo 3. Antecedentes, Estad
- Page 72 and 73: 48 Capítulo 3. Antecedentes, Estad
- Page 74 and 75: 50 Capítulo 3. Antecedentes, Estad
- Page 76 and 77: 52 Capítulo 3. Antecedentes, Estad
- Page 78 and 79: 54 Capítulo 3. Antecedentes, Estad
- Page 80 and 81: 56 Capítulo 3. Antecedentes, Estad
- Page 82 and 83: 58 Capítulo 3. Antecedentes, Estad
- Page 84 and 85: trices para concatenarlas y multipl
- Page 86 and 87: 62 Capítulo 3. Antecedentes, Estad
- Page 88 and 89: 64 Capítulo 3. Antecedentes, Estad
- Page 92 and 93: 68 Capítulo 3. Antecedentes, Estad
- Page 94 and 95: 70 Capítulo 3. Antecedentes, Estad
- Page 96 and 97: 72 Capítulo 3. Antecedentes, Estad
- Page 98 and 99: 74 Capítulo 3. Antecedentes, Estad
- Page 100 and 101: 76 Capítulo 3. Antecedentes, Estad
- Page 102 and 103: 78 Capítulo 3. Antecedentes, Estad
- Page 104 and 105: 80 Capítulo 3. Antecedentes, Estad
- Page 106 and 107: 82 Capítulo 4. Metodología de Tra
- Page 108 and 109: 84 Capítulo 4. Metodología de Tra
- Page 110 and 111: 86 Capítulo 4. Metodología de Tra
- Page 112 and 113: 88 Capítulo 4. Metodología de Tra
- Page 114 and 115: 90 Capítulo 4. Metodología de Tra
- Page 116 and 117: 92 Capítulo 4. Metodología de Tra
- Page 118 and 119: 94 Capítulo 4. Metodología de Tra
- Page 120 and 121: 96 Capítulo 4. Metodología de Tra
- Page 122 and 123: 98 Capítulo 4. Metodología de Tra
- Page 124 and 125: 100 Capítulo 4. Metodología de Tr
- Page 126 and 127: 102 Capítulo 4. Metodología de Tr
- Page 128 and 129: 104 Capítulo 4. Metodología de Tr
- Page 130 and 131: 106 Capítulo 4. Metodología de Tr
- Page 132 and 133: 108 Capítulo 4. Metodología de Tr
- Page 134 and 135: 110 Capítulo 4. Metodología de Tr
- Page 136 and 137: 112 Capítulo 4. Metodología de Tr
- Page 138 and 139: 114 Capítulo 5. ResultadosTodas la
3.3. Toolkits para Interfaces Gráficas <strong>de</strong> Usuario 67Hay un conjunto <strong>de</strong> señales que todos los widgets heredan, como por ejemplo, <strong>de</strong>stroyy hay señales que son específicas <strong>de</strong> cada widget, como por ejemplo, la señal toggled <strong>de</strong> unbotón <strong>de</strong> selección.Para que un <strong>de</strong>terminado widget haga algo útil, habrá que crear el controlador que recojala señal enviada por dicho widget, y se encargue <strong>de</strong> llamar a la función apropiada. Para haceresto se usa la siguiente función:g i n t g t k s i g n a l c o n n e c t ( GtkObject ∗ o b j e c t , g c h a r ∗name ,G tkSignalFunc func , g p o i n t e r f u n c d a t a ) ;don<strong>de</strong> el primer argumento es el widget que emite la señal, el segundo el nombre <strong>de</strong> laseñal que se quiere capturar, el tercero es la función a la que se <strong>de</strong>be llamar cuando se capturala señal y el cuarto, los datos que queremos pasarle a dicha función.La función especificada en el tercer argumento se <strong>de</strong>nomina retrollamada (función <strong>de</strong> respuestao callback) y <strong>de</strong>be tener la forma siguiente:void c a l l b a c k f u n c ( GtkWidget ∗ widget , g p o i n t e r c a l l b a c k d a t a ) ;don<strong>de</strong> el primer argumento es un puntero al widget que emitió la señal, y el segundo unpuntero a los datos que son pasados a la función. Estos datos son los que se le pasan a través<strong>de</strong>l último argumento <strong>de</strong> la función gtk signal connect(). Otra llamada usada con el mismopropósito que la anterior es:g i n t g t k s i g n a l c o n n e c t o b j e c t ( GtkObject ∗ o b j e c t ,g c h a r ∗name ,G tkSignalFunc func ,GtkObject ∗ s l o t o b j e c t ) ;Esta función es igual a la anterior, salvo en el último argumento, que en este caso es unpuntero a GtkObject. En este caso la retrollamada <strong>de</strong>berá ser <strong>de</strong> la siguiente forma:void c a l l b a c k f u n c ( GtkObject ∗ o b j e c t ) ;