Manual
logo



Programación C++ con AGU desde 0

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.