Etnablog.altervista.org :)

Visitatore: 1313323
Welcome ospite
Menu di accessibilità:
Dimensione carattere:

Home > Programmazione C > Glade 3 e Anjuta: Il codice di base
Contenuto della pagina:
28 Maggio 2007

Glade 3 e Anjuta: Il codice di base

Guida Glade e Anjuta (terza parte) 

Qualche giorno fa abbiamo sviluppato un semplice progettino che rappresentava semplicemente un bottone che chiudeva il programma.

Oggi dobbiamo parlare un pò di codice. Chi non ha mai programmato mi seguirà a stento ma cercherò di descrivere le cose nel modo più semplice possibile, giusto per fornire un input che dovrebbe avviare verso uno studio un attimino più approfondito facendo uso di guide più strettamente dedicate al codice C.

In rete ve ne sono tante di guide, come anche nei negozi.

Ecco il codice di main.c del progetto realizzato:


/* Created by Anjuta version 1.2.4a */
/*	This file will not be overwritten */

#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif

#include <gnome.h>
#include <glade/glade.h>

void ok_button_clicked (GtkWidget *widget, gpointer user_data)
{
  printf ("Grazie per aver provato il programma :)");
  gtk_main_quit ();
}


int
main (int argc, char *argv[])
{
  GladeXML  *main_window;
  GtkWidget *widget;

  gtk_init (&argc, &argv);

  /* Carica l'interfaccia utente */
  main_window = glade_xml_new (PACKAGE_SOURCE_DIR"/progetto_bottone.glade", NULL, NULL);

	/* Predispone la gestione del bottone chiamato "okbutton" */
  widget = glade_xml_get_widget (main_window, "okbutton");
  g_signal_connect (G_OBJECT (widget), "clicked",
                    G_CALLBACK (ok_button_clicked),
                    NULL);
	
  /* Chiusura del programma quando l'utente chiude la finestra */
  widget = glade_xml_get_widget (main_window, "window1");
  g_signal_connect (G_OBJECT (widget), "delete_event",
                    G_CALLBACK (gtk_main_quit), NULL);

  /* Avvia il ciclo */
  gtk_main ();

  return 0;
}

Vediamo di capire cosa significa quel codice.

Tanto per cominciare il testo contenuto fra /* e */ è considerato un commento, è messo lì per essere letto da voi e non dalla macchina (che non lo compila).

Il commento è seguito poi da tre comandi preceduti dal segno "#" (detto "sharp").

I comandi preceduti da quel segno sono particolari, sono "direttive del preprocessore".

Letteralmente quei tre comandi stanno a significare:
"Se HAVE_CONFIG_H è stato definito, allora includi config.h nella compilazione.

Successivamente (osservate il codice) sono stati inclusi nella compilazione "gnome.h" (che contiene le librerie gtk) e le librerie glade.h (per disporre dei comandi che gestiscono il file .xml prodotto da glade).

void ok_button_clicked invece è una funzione, che come potete vedere si chiama con lo stesso "ok_button_clicked" che avevate indicato in glade tra le proprietà del bottone.

Saltiamo per ora questa funzione, e andiamo al cuore del programma, cioè che è contenuto in "int main ()".

GladeXML *main_window; --> In sostanza i file .glade vengono letti dinamicamente mediante la classe "GladeXML". In sostanza quel comando è il primo passo da fare.

GtkWidget *widget; --> Parlando di programmazione, un "widget" è un elemento di una interfaccia, che permette all'utente di interagirvi. Le Finestre, i bottoni, ogni cosa che avete aggiunto "all'albero" della vostra GUI creata con Glade, è un "widget". Noi possiamo avere accesso ad ogni widget usando "GtkWidget". Nel caso specifico accederemo ad un widget, che, per nostra comodità, chiameremo appunto "*widget".

L'asterisco di fronte a *widget non è messo a caso, è infatti un "puntatore", e i puntatori sono preceduti da un asterisco.

gtk_init --> Passo fondamentale, si occupa di inizializzare l'ambiente ed esaminare gli argomenti della linea di comando (&argc, &argv);

Le righe successive sono dedicate alla gestione del bottone che avevamo creato e chiamato "ok_button". E' la gestione del tasto.

Le righe ancora successive servono a chiudere definitivamente il programma quando l'utente clicca sul bottone di chiusura della finestra ("delete_event").

Queste ultime due operazioni sono dette "callback", cioè richiamano delle funzioni. Se specifichiamo i "segnali" in glade, possiamo omettere queste "callback" manuali e mettere al loro posto un solo comando: glade_xml_signal_autoconnect (xml);

infine abbiamo gtk_main che serve ad avviare il "ciclo" e infine "return 0".

Da ora in poi viene il difficile: cercate con google il sito delle GTK e prendete la "reference" (guida di riferimento) dove sono spiegate le sintassi per la gestione della grande quantità di segnali che potete applicare ai widget.

Per oggi finiamo qui. Scaricate dal sito gnome (gtk in particolare) l' ultima guida aggiornata sulle GTK e ristudiate da lì le sintassi dei comandi che abbiamo usato.

Qualche link:
http://www.gtk.org/
http://www.g tk.org/tutorial/

Descrizioni usate nelle foto: 
Postato da: Etnablog in Programmazione C alle 23:41

Permalink | Commenti(1)
Inserisci commento

Commenti:

Ciao,

Volevo ringraziarti per l'ottima guida che hai fatto su glade3 e anjuta , sto cercando di imparare a programmare in C usando l'interfaccia grafica. Vorrei fare un semplice programma che calcola il costo di stampa di un plotter nota l'area dell'immagine. Mi sono un po incasinato con glade(1) e l'autogenerazione di codice , adesso seguendo il tuo manuale vedo che con galde3 non si ua piu.

Se riesco a fare qualcosa di decente , magari lo puoi pubblicare.

Saluti
Ben

 

Postato da: ben il 18 Novembre 2007 alle 17:31

Solo gli utenti registrati possono lasciare commenti
*1 user online
Caricamento pagina: 0.03 s