Autore: Fabio Di Matteo
Ultima revisione: 28/11/2023 - 09:52
Archivio completo con i sorgenti: test.zip
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.
Installare la libreria wxwidgets su linux non è affatto complicato, basta infatti usare il package manager della nostra distribuzione preferita einstallare i pacchetti.
Ho usato l'ambiente MSYS2 perfetto per lo scopo.
Per creare la nostra interfaccia grafica ho usato 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:
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 <wx/wxprec.h> #ifndef WX_PRECOMP #include <wx/wx.h> #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)
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__
#include "MyFrame.h" MyFrame::MyFrame( wxWindow* parent ) : TMainFrame( parent ) { } void MyFrame::clicked( wxCommandEvent& event ) { this->label->SetLabel(this->entry->GetValue()); }
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
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
Il nostro wiki installa solamente cookie tecnici necessari al funzionamento della piattaforma "Dokuwiki". Niente analitics, statistiche, tracciamenti o altro.