Práctica II-1:
En Anjuta,
crea un proyecto
nuevo,
selecciona programa
proyecto Gtkmm 2.0 (por defecto el lenguaje de
programación es
C++), como nombre practica_II_1
(o el que se te antoje). |
|
Recuerda que dará error al generar el proyecto. Edita el archivo configure en la carpeta correspondiente /home/[usuario]/Projects/practica_II_1 y reemplaza las alusiones a gtkmm-2.0 por gtkmm-2.4 (que es la librería que nosotros hemos instalado). Personalmente, utilizo la pestaña "terminal" del propio Anjuta (abajo, con Build, Find, CVS,...) e introduzco gedit /home/[usuario]/Projects/practica_II_1/configure posteriormente le doy a Ctrl+H (Reemplazar) y utilizo la opción reemplazar todos. (En segundas ocasiones, no se hace preciso escribir nada porque gedit memoriza los usos anteriores). GUARDAMOS el archivo, volvemos a Anjuta y le damos a Construir->AUTO GENERAR, y ya no debiera haber problemas.
Modificamos el archivo de main.cc para que quede tal que así: |
|
/* Created by Anjuta version
1.2.4a */ /* This file will not be overwritten */ #include <gtkmm.h> int main(int argc, char *argv[]) { Gtk::Main programa(argc, argv); Gtk::Window miventanica; miventanica.set_title("¡OLÉ! viva Ubuntu"); programa.run(miventanica); return 0; } |
|
Explicación:#include <gtkmm.h>Alguien ha hecho mucho trabajo por nosotros y ha diseñado todos los componentes que nos va a permitir la realización de aplicaciones gráficas. La libreria para C++ se encuentra en el archivo gtkmm.h (/usr/include/gtkmm-2.4/gtkmm.h) |
|
|
|
int main(int argc, **char argv[]){ ... } Nuestra función main es ligeramente diferente, ahora tiene argumentos. Esta es la forma habitual de escribir main, argc es un entero que indica el número de argumentos enviados y argv es un puntero a punteros de cadena, esto es, que si nosotros enviamos algún argumento (en Anjuta, Construir->configurar parámetros del programa) estos se interpretan como cadenas. Así, si escribimos en el terminal: /home/[usuario]/Projects/practica_II_1/src/practica_II_1
hola a todos
argc, es igual a 4. argv[0] es igual a /home/[usuario]/Projects/practica_II_1/src/practica_II_1 argv[1] es igual a hola argv[2] es igual a a argv[3] es igual a todos |
|
Hagamos una prueba, modifiquemos el archivo anterior por el siguiente: |
|
/* Created by Anjuta version
1.2.4a */ /* This file will not be overwritten */ // Incluiremos la libreria gtkmm.h donde alguien ha hecho mucho trabajo por nosotros // aquí se incluye todo el codigo para crear los componentes visuales #include <gtkmm.h> // biblioteca necesaria para utilizar GString #include <glib.h> // la función main, algo diferente int main(int argc, char *argv[]) { GString * mensaje; //declaración de la cadena mensaje mensaje = g_string_new( "Hola "); // primera asignación a la cadena mensaje if (argc>1) { g_string_append(mensaje, argv[1]); //si existe un argumento añade a Hola, el primer argumento. }else{ g_string_append (mensaje, "DESCONOCIDO");// si no hay argumentos el mensaje es Hola DESCONOCIDO } Gtk::Main programa(argc, argv); // Crear un objeto Main de Gtk, obligatorio en todo proyecto GTKmm Gtk::Window miventanica;// Crear un objeto Window de Gtk -la ventanica - miventanica.set_title(mensaje->str);// establece el título programa.run(miventanica);// Echar a correr nuestra ventana return 0; } |
|
C++, no incluye "de serie" el tipo cadena (string) [no podía ser perfecto], así que para manipularlas de forma fácil (sin preocuparnos por la gestión de memoria) he utilizado GString, un tipo definido en glib.h, de ahí la instrucción #include <glib.h>. Básicamente, miramos si argc es mayor que 1, esto es, si existe algun argumento acompañando al nombre. Que sí, pues añadimos el primer argumento a "Hola ", que no, pues el título de la ventana será "Hola DESCONOCIDO". Después de compilarlo, ejecuta en un terminal: /home/[usuario]/Projects/practica_II_1/src/practica_II_1 pepe y aparecerá la misma ventana pero con un título diferente. Desconozco, al día de hoy, porque es necesario pasar los argumentos argc y argv al proceso Gtk::Main en su declaración (inicialización), pero lo cierto es que si no se realiza así la ejecución del programa (que no la compilación) da errores. Prueba a comentar los argumentos, graba el archivo, compílalo (no da error) y ejecútalo... observa los resultados (recuerda el uso de comentarios Gtk::Main programa(/*argc,argv*/);) |
|
Añadiendo componentes |