Creación del Proyecto GTK Básico
Proyecto C++ Genérico
Puede ocurrir que al crear el proyecto con el asistente, creemos un
proyecto C++ genérico y se nos olviden configurar los paquetes
externos. Podrías pensar que no importa, porque en
las propiedades del proyecto [Proyecto->Propiedades], podemos
añadir un módulo y posteriormente añadir la
librería gtkmm-2.4, de manera similar a como hicimos con el
anterior (eso mismo pensé yo), pero lo cierto es que tenemos que trastear algo más.
Vamos a probarlo, creamos un proyecto C++ Genérico (en mi caso
lo he llamado basico2 y la carpeta destino es Gtk3) e introducimos el
siguiente
código en main.cc:
#include
<gtkmm.h>
#include
<glib.h>
int main(int
argc, char *argv[])
{
GString * mensaje;
mensaje = g_string_new( "Hola ");
if (argc>1)
{
g_string_append(mensaje, argv[1]);
}else{
g_string_append (mensaje, "DESCONOCIDO");
}
Gtk::Main programa(argc, argv);
Gtk::Window miventanica;
Gtk::Label
etiqueta(mensaje->str);
miventanica.add(etiqueta);
etiqueta.show();
miventanica.set_title("maestrodenada.com");
Gtk::Main::run(miventanica);// Echar a correr nuestra ventana
return 0;
}
Al ir a construir el proyecto da infinidad de errores, comenzando
porque no conoce gtkmm.h (origen de todos los demás). Para
solucionarlo vamos editar las
propiedades de proyecto, añadimos un modulo (en mi caso, BASICO de nombre) y luego nos permite
añadir paquetes,
añadiendo gtkmm-2.4, como hicimos en el apartado anterior.
Pero al construir el proyecto, vuelve a dar el mismo error
¿why? A mi entender es un pequeño error de Anjuta, aunque
quizás tenga alguna razón de ser... Pero vayamos a la
solución:
Seleccionamos la visualización del
proyecto (en rojo) y editamos las
propiedades de main.cc:
En la caja de texto
Bibliotecas, introducimos
$(BASICO_LIBS):
Y en las
propiedades de src, en las
opciones del compilador, en
preprocesado debe añadirse
[espacio]$(BASICO_CFLAGS):
El espacio resulta esencial, sin el espacio no se realiza correctamente la construcción del proyecto.Ahora sí, funciona y al ejecutarlo (si como argumento introducimos lolo) aparece esto:
| ..que estirándolo... | |
Explicación Código
Como novedad, vemos que en la configuración de la interfaz hemos introducido las siguientes líneas:
Gtk::Label
etiqueta(mensaje->str);
miventanica.add(etiqueta);
etiqueta.show();
miventanica.set_title("maestrodenada.com");Gtk::Label etiqueta(mensaje->str);Declara
e inicializa un objeto del tipo Gtk::Label, texto no editable por el
usuario. Este objeto al cual he nombrado etiqueta, se ha inicializado
con el valor de la cadena mensaje, que anteriormente asociábamos
al título de la ventana. La cual ahora tiene por título
maestrodenada.com
miventanica.add(etiqueta);En
esta instrucción asociamos o añadimos nuestra
etiqueta a miventanica. Nuestro Gtk::Label, ha sido creado en la
instrucción anterior pero no pertenecía al Gtk::Window,
es preciso añadir a la ventana los distintos componentes. Esto
es así, y no puede automatizarse, porque en las aplicaciones
importantes puede haber varias ventanas, cada una de ellas con
distintos componentes.
etiqueta.show();Muestra
la etiqueta. En una aplicación, puedo tener componentes visibles
u ocultos en función de la situación. En principio, todos
los componentes están ocultos, razón por la cual debemos
hacerlos visibles.