Al utilizar Glade (próximamente), veremos
que
existen dos modos de programar. Uno que denominan
básico y
otro que denominan derivado (usando clases). Consultando ejemplos de programación con gtkmm, no he encontrado ejemplo alguno de la programación básica, siempre han sido ejemplos usando clases,... Sin embargo, para pequeños programas con Glade lo habitual es usar el modo básico. |
|
Programación básica de Gtk:En el capítulo anterior, vimos que no podíamos interactuar con el usuario modificando nuestra etiqueta (Gtk::Label), porque las funciones encargadas de gestionar las acciones del usuario no tenían conocimiento de la misma. Declararla como variable global, provoca errores en la ejecución, porque los objetos de Gtk tienen tamaños variables, requiriendo el uso de variables globales tipo puntero.Veamos como hacerlo: |
|
Práctica II-4:
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_4
(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_4 y reemplaza las alusiones a gtkmm-2.0 por gtkmm-2.4 (que es la librería que nosotros hemos instalado).
Modificamos el archivo de main.cc para que quede tal que así: |
|
/* ************************* * MAESTRODENADA.COM * * presenta * * el * * programa básico * * con Gtk * ***************************/ #include <iostream> #include <gtkmm.h> Gtk::Label* etiqueta; int veces=0; void pulsar_boton(); int main(int argc, char *argv[]) { Gtk::Main programa(argc, argv); // Creación del proceso gráfico // Diseño del entorno gráfico, declaración de componentes Gtk::Window miventanica; Gtk::VBox principal; Gtk::HSeparator linea; Gtk::Label etiqueta2 ("Pulsa en el botón de abajo"); Gtk::Button contador("¡AQUÍ!"); // Diseño del entorno gráfico, composición de componentes miventanica.add(principal); principal.pack_start(etiqueta2); principal.pack_start(linea); principal.pack_start(contador); // Diseño del entorno gráfico, hacer visibles los controles principal.show(); etiqueta2.show(); contador.show(); linea.show(); // Diseño del entorno gráfico, retoques miventanica.set_title("maestrodenada.com"); miventanica.resize(260,110); // Diseño del entorno gráfico, conexión señales con funciones contador.signal_clicked().connect(sigc::ptr_fun(&pulsar_boton)); etiqueta = &etiqueta2; // Inicialización de variables punteros Gtk::Main::run(miventanica); // lanzamiento/ejecución del proceso return 0; } void pulsar_boton() { char h[30]; sprintf (h, "Has pulsado %i veces el botón", ++veces); etiqueta->set_text(h); } |
|
Explicación:Para manipular un control o componente de Gtk debemos realizar lo siguiente:
Para acceder a los elementos hemos usado -> En C y C++, para acceder a los datos individuales de una variable de un objeto complejo (con varios datos), se utiliza el [.], tal y como se observa en main. Sin embargo, en las variables puntero de objetos complejos, el acceso se realiza a través de ->. Como curiosidad, decir que la instrucción: etiqueta->set_text(h); es igual a (*etiqueta).set_text(h); como comentamos en una variable puntero, * nombre_variable, devuelve el contenido al que apunta, por lo que (*etiqueta) devuelve un objeto Gtk::Label, con el punto accedemos a la función del objeto Gtk::Label devuelto. |
|
Es fácil, y con Glade más, sin
embargo
lo habitual en los ejemplos de programación con gtkmm es
utilizar un método más propio de C++, usar clases |
|
Interactuando...programación con
clases de Gtk |