Barra laterale

programmazione:gtk:sviluppare_con_le_gtk_su_windows

Sviluppare con le librerie Gtk+2 su Windows

Autore: Fabio Di Matteo
Ultima revisione: 03/04/2010

Ecco quello che serve a noi:

  1. Il pacchetto contenente l'sdk gelle gtk+2 comprensivo di tutto, dipendenze comprese per windows ;
  2. L'IDE per C/C++ Code::Blocks ;

Installazione dell'SDK GTK+2

Scarichiamo il pacchetto .zip gtk2 bundle e scompattiamolo in C: in modo da ritrovarci la directory C:\gtk2 . Inoltre è necessario aggiungere alla variabile di sistema PATH il percorso della sottodirectory bin delle nostre gtk+2 . Per far questo andiamo nel pannello di controllo → sistema → tab avanzate→variabili d'ambiente→modifica variabile PATH aggiungendo la stringa C:\gtk2\bin . Questo permettera a codeblocks di trovare il tool pkg-config necessario per trovare dinamicamente i percorsi dei file necessari alla compilazione.
Verifichiamo se la nostra installazione è andata a buon fine aprendo il terminale di widows (cmd) e digitiamo il seguente comando:

pkg-config --cflags gtk+-2.0 

se vengono restituiti i percorsi alle varie directory dove si trovano i file necessari per la compilazione (headers e percorsi alle librerie dinamiche) l'installazione manuale è andata a buon fine.

N.B. chi dovra' solo eseguire i vostri programmi non dovra' installare le gtk per lo sviluppo, gli bastera' soltanto installare il classico pacchetto con le gtk runtime autoinstallante

Settiamo il tema grafico stile windows per gtk+2

Creiamo il file C:\gtk2\etc\gtk-2.0\gtkrc contenente la seguente riga:

gtk-theme-name = "MS-Windows"

Lavoriamo con Codeblocks

Installiamo l'IDE, dopo di che creiamo un progetto gtk+2 da File→New→Project→Gtk+ project . Code::blocks creera un progetto con del codice d'esempio in un singolo di nome main.c . Nel nostro esempio sostituiamo il codice d'esempio con il nostro. Nel nostro esempio utilizzeremo la un file xml separato per la definizione dei widget creato con Glade 3 il disegnatore visuale di interfacce.
Ecco il nostro codice:

#include <gtk/gtk.h>                                                //includo le librerie gtk e glade.
 
GtkBuilder *xml;                                                 //questo è il puntatore al file xml che contiene l'interfaccia  
GtkWidget  *widget;                                              //questa variabile serve per recuperare di volta in volta il  
                                                                //  widget (ovvero l'oggetto ) che vogliamo usare
 
 
 
G_MODULE_EXPORT void on_MainWindow_delete_event(GtkWidget *widget, gpointer user_data)        //altra callback associata alla chiusura della 
{                                                                         // finestra 
    gtk_main_quit();
}
 
 
 
int
main (int argc, char *argv[])
{
  	gtk_init (&argc, &argv);
	gchar* base;
	gchar* glade_file;
 
	if (g_find_program_in_path ("nomeeseguibile")==NULL){
		/*Ricava il percorso dell'eseguibile, senza il nome del file*/ 
		base = g_path_get_dirname(argv[0]);
 
		/*Concatena il percorso base al nome file gui.glade */
		glade_file = g_build_filename (base, "gui.glade", NULL);
	}else{
		base = g_path_get_dirname(g_find_program_in_path ("nomeeseguibile"));
		glade_file = g_build_filename (base, "gui.glade", NULL);
	}	
 
    /*Infine carica come disolito il file dell'interfaccia */
    GError* error = NULL;
	xml = gtk_builder_new ();
	if (!gtk_builder_add_from_file (xml, glade_file, &error))
	  {
		g_warning ("Couldn't load builder file: %s", error->message);
		g_error_free (error);
	  }
 
 
	 /* connette tutti gli eventi dei widget alle rispettive funzioni */
   	 gtk_builder_connect_signals (xml, NULL);
 
 
      	/* Avvia il ciclo principale delle gtAvvia il ciclo principale delle gtk*/ 
	gtk_main ();
 
  return 0;
 
}

Da notare il fatto che su windows sembra essere necessario aggiungere G_MODULE_EXPORT alla definizione delle callbacks per far funzionare l'autoconnessione ai segnali emessi dai widgets con lo stesso nome.

G_MODULE_EXPORT void on_MainWindow_delete_event(GtkWidget *widget, gpointer user_data) 

Di seguito il file della nostra interfaccia utente gui.glade realizzato con Glade 3.

<?xml version="1.0"?>
<interface>
  <requires lib="gtk+" version="2.16"/>
  <!-- interface-naming-policy project-wide -->
  <object class="GtkWindow" id="MainWindow">
	<property name="visible">True</property>
    <signal name="delete_event" handler="on_MainWindow_delete_event"/>
    <child>
      <placeholder/>
    </child>
  </object>
</interface>

programmazione/gtk/sviluppare_con_le_gtk_su_windows.txt · Ultima modifica: 18/04/2018 - 15:48 (modifica esterna)