====== Introduzione allo sviluppo multipiattaforma con WxWidgets su Gnu/Linux ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **// 28/11/2023 - 09:52 //** // // {{:programmazione:wxwidgets:wxwidgets_example0.png?400|}} {{:programmazione:wxwidgets:wxwidgets_example0_win.png?400|}} **Archivio completo con i sorgenti:** {{ :programmazione:wxwidgets:test.zip |}} [[http://it.wikipedia.org/wiki/WxWidgets|WxWidgets]] è una libreria per lo sviluppo di programmi ,dotati di interfaccia grafica, multipiattaforma. La libreria ha la particolarita' di usare i widget grafici nativi del sistema ospite in modo da integrare ,dal punto di vista grafico, maggiormente le applicazioni con il resto dell'interfaccia grafica. \\ ===== Installazione wxwidget su Linux ===== Installare la libreria wxwidgets su linux non è affatto complicato, basta infatti usare il package manager della nostra distribuzione preferita einstallare i pacchetti. ===== Installazione per windows ===== Ho usato l'ambiente MSYS2 perfetto per lo scopo. ===== Creiamo la nostra gui ===== Per creare la nostra interfaccia grafica ho usato [[https://github.com/wxFormBuilder/wxFormBuilder|wxFormBuilder]]. Un pratico editor visuale per creare interfacce grafiche per wxWidgets. I passi da compiere per ottenere le classi base dalle quali otterremo le classi ereditate per creare i nostri widgets sono i seguenti: - disegnare la nostra interfaccia; - salvare il file di progetto .fbp - nelle prprietà del progetto settare il path della cartella dove salvare le nostre classi (path relativo); - dal menu "tools" selezionare "generate inerithed class" ===== Main.cc ===== Implemento la mia app, la quale caricherà i vari widgets una volta avviata. // GUI Designer for wxWidgets using wxFormBuilder // https://yasriady.blogspot.com/2015/08/gui-designer-for-wxwidgets-using_42.html #include #ifndef WX_PRECOMP #include #endif #include "gui/gui.h" #include "MyFrame.h" class MyApp: public wxApp { virtual bool OnInit(); }; bool MyApp::OnInit() { MyFrame *frame=new MyFrame(NULL); frame->Show(true); return true; } //Implementa la main() IMPLEMENT_APP(MyApp) ===== MyFrame.h ===== i file generati da wxFormBulder si trovano in una cartella chiamata "gui" relativa al progetto. #ifndef __MyFrame__ #define __MyFrame__ /** @file Subclass of TMainFrame, which is generated by wxFormBuilder. */ #include "gui/gui.h" //// end generated include /** Implementing TMainFrame */ class MyFrame : public TMainFrame { protected: // Handlers for TMainFrame events. void clicked( wxCommandEvent& event ); public: /** Constructor */ MyFrame( wxWindow* parent ); //// end generated class members }; #endif // __MyFrame__ ===== MyFrame.cpp ===== #include "MyFrame.h" MyFrame::MyFrame( wxWindow* parent ) : TMainFrame( parent ) { } void MyFrame::clicked( wxCommandEvent& event ) { this->label->SetLabel(this->entry->GetValue()); } ===== Makefile ===== CPP = g++ OPTS = `wx-config --cxxflags --libs` all: make linux linux: $(CPP) main.cc ./gui/gui.cpp MyFrame.cpp -o wxtest $(OPTS) clean: rm wxtest ===== makefile con supporto a Windows ===== Questo makefile testato con msys2 compila staticamente wxwidgets e le librerie del g++ (standard, posix etc...). CPP_unix = g++ OPTS_unix = `wx-config --cxxflags --libs` CPP_win64 = g++ -static OPTS_win64 = `wx-config --cxxflags --libs --static=yes` all: make linux linux: $(CPP_unix) main.cc ./gui/gui.cpp MyFrame.cpp -o wxtest $(OPTS_unix) win: $(CPP_win64) main.cc ./gui/gui.cpp MyFrame.cpp -o wxtest $(OPTS_win64) clean: rm wxtest.* Per compilare staticamente su windows quindi digitare : **make win**