Autore: Fabio Di Matteo
Ultima revisione: 15/02/2008
“gtkmm è l'interfaccia C++ ufficiale del popolare toolkit grafico GTK+. Include le typesafe callback e un completo set di widget facilmente estendibili grazie all'ereditarietà.”
Da Wikipedia, l'enciclopedia libera.
Creeremo una finestra che sarà in grado di lanciare un'applicazione scrivendo semplicemente il nome della stessa sulla casella di testo.
Faremo tutto questo grazie a due file: main.cc
contenente il blocco principale del programma main_window.cc
la classe che disegna l'interfaccia.
#include <gtkmm/main.h> #include "main_window.cc" int main(int argc, char *argv[]) { Gtk::Main kit(argc, argv); MainWindow window1; Gtk::Main::run(window1); return 0; }
#include <iostream> #include <gtkmm.h> class MainWindow : public Gtk::Window { protected: //le dichiarazioni dei widget e i metodi callbacks come "protetti" Gtk::Fixed fisso; Gtk::Entry entry; Gtk::Button button1; void on_button1_clicked() { system(entry.get_text().c_str()); } public: MainWindow() //nel costruttore disegnamo la finestra { set_size_request(320, 240); set_title("Esempio classe gtkmm"); add(fisso); //contenitore che permette un posizionamento "al pixel" dei widget fisso.put(button1,160, 170); //posiziono i widget sul contenitore fisso.put(entry,60, 140); entry.set_text("[inserisci comando]"); button1.set_label("Esegui"); show_all_children(); //collego al click del bottone l'esecuzione del metodo on_button1_clicked() button1.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::on_button1_clicked) ); } ~MainWindow() { } };
CPP = g++ OPTS = `pkg-config --cflags --libs gtkmm-2.4` all: $(CPP) main.cc -o main $(OPTS) clean: rm main
Può essere utile dover spezzare la classe in due file con rispettivamente le intestazioni con i prototipi dei metodi e l'implementazione della classe stessa.
Di seguito i due file e il main.
Ci sono di differenze con il codice precedente solo per quanto riguarda il makefile che questa volta include esplicitamente la compilazione della classe con la riga$(CPP) main.cc main_window.cc -o main $(OPTS)
che vedremo meglio in seguito.
La main
#include <gtkmm/main.h> #include "main_window.h" int main(int argc, char *argv[]) { Gtk::Main kit(argc, argv); MainWindow window1; Gtk::Main::run(window1); return 0; }
Il main_window.h
//avrei potuto usare solamente #include <gtkmm.h> #include <gtkmm/button.h> #include <gtkmm/window.h> #include <gtkmm/fixed.h> #include <gtkmm/entry.h> class MainWindow : public Gtk::Window { public: MainWindow(); virtual ~MainWindow(); Gtk::Entry entry; //publica in quanto si potrà accedere al contenuto protected: //le dichiarazioni dei widget e i metodi callbacks come "protetti" Gtk::Fixed fisso; Gtk::Button button1; void on_button1_clicked(); };
main_window.cc
#include <iostream> #include <gtkmm.h> #include "main_window.h" MainWindow::MainWindow() //nel costruttore disegnamo la finestra { set_size_request(320, 240); set_title("Esempio classe gtkmm"); add(fisso); fisso.put(button1,160, 170); fisso.put(entry,60, 140); entry.set_text("[inserisci comando]"); button1.set_label("Esegui"); show_all_children(); //collego al click del bottone l'esecuzione del metodo on_button1_clicked() button1.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::on_button1_clicked) ); } MainWindow::~MainWindow() { } void MainWindow::on_button1_clicked() { system(entry.get_text().c_str()); }
Il Makefile
CPP = g++ OPTS = `pkg-config --cflags --libs gtkmm-2.4` all: $(CPP) main.cc main_window.cc -o main $(OPTS) clean: rm main