Autore: Fabio Di Matteo
Ultima revisione: 17/02/2008
Facendo riferimento all'articolo Una classe di esempio con Gtkmm vedremo come aggiungere un bottone alla fistra principale che servirà per mostrare una seconda finestra.
Di seguito il codice completo dell'esempio.
Ultilizzeremo 2 classi più il main per realizzare il tutto, e per comodità metteremo il tutto in 3 file distinti: main.cc
, main_window.cc
e secondary_window.cc
.
#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> #include "secondary_window.cc" 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; Gtk::Button button2; void on_button1_clicked() { system(entry.get_text().c_str()); } void on_button2_clicked() { SecondaryWindow window2; //dichiaro la seconda finestra window2.set_modal(true); //finestra modale Gtk::Main::run(window2); //chiedo al ciclo principale di mostrarla. //quando chiude la nuova finestra prende alcuni dati set_title("Titolo finestra modale: " + window2.get_title()); entry.set_text("Titolo finestra modale: " +window2.get_title()); //invoco il distruttore della classe window2 //così scarico dalla memoria la finestra e i suoi widget window2.~SecondaryWindow(); } public: MainWindow() //nel costruttore disegnamo la finestra { set_size_request(320, 240); set_title("Esempio due finestre gtkmm"); add(fisso); fisso.put(button1,160, 140); fisso.put(button2,160, 180); fisso.put(entry,60, 110); entry.set_text("[inserisci comando]"); button1.set_label("Esegui"); button2.set_label("Seconda finestra"); 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) ); button2.signal_clicked().connect( sigc::mem_fun(*this, &MainWindow::on_button2_clicked) ); } ~MainWindow() { } };
#include <iostream> #include <gtkmm.h> class SecondaryWindow : public Gtk::Window { protected: //le dichiarazioni dei widget e i metodi callbacks come "protetti" Gtk::Fixed fisso; Gtk::Button button1; void on_button1_clicked() { Gtk::Main::quit(); //chiude la finestra //exit (0); //chiude tutto il programma } public: SecondaryWindow() //nel costruttore disegnamo la finestra { set_size_request(320, 240); set_title("Esempio due finestre gtkmm"); add(fisso); fisso.put(button1,140, 110); button1.set_label("Chiudi !"); show_all_children(); //collego al click del bottone l'esecuzione del metodo on_button1_clicked() button1.signal_clicked().connect( sigc::mem_fun(*this, &SecondaryWindow::on_button1_clicked) ); } ~SecondaryWindow() { } };
Il nostro wiki installa solamente cookie tecnici necessari al funzionamento della piattaforma "Dokuwiki". Niente analitics, statistiche, tracciamenti o altro.