====== 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**