Autore: Fabio Di Matteo
Ultima revisione: 04/01/2019 - 19:20
Richiede WxWidgets >4
Nell'articolo Introduzione allo sviluppo multipiattaforma con WxWidgets su Gnu/Linux abbiamo imparato a scrivere il codice base per un semplice progetto wxwidgets. Abbiamo costruito la nostra interfaccia grafica a forza di linee di codice c++. Adesso vedremo come realizzare un file xml contenente la nostra gui e caricarlo nel nostro progetto.
Realizzeremo il nostro file xml o per meglio dire il nostro file XRC con Wxformbuilder .
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <resource xmlns="http://www.wxwindows.org/wxxrc" version="2.3.0.1"> <object class="wxDialog" name="dialog0"> <style>wxDEFAULT_DIALOG_STYLE</style> <title></title> <centered>1</centered> <object class="wxBoxSizer"> <orient>wxVERTICAL</orient> <object class="sizeritem"> <option>0</option> <flag>wxALL</flag> <border>5</border> <object class="wxTextCtrl" name="text0"> <value></value> </object> </object> <object class="sizeritem"> <option>0</option> <flag>wxALL</flag> <border>5</border> <object class="wxButton" name="button0"> <label>clicca</label> <default>0</default> <markup>0</markup> <bitmap /> </object> </object> </object> </object> </resource>
Tramite il codice sottostante caricheremo e visualizzeremo il nostro file xrc: main.cc
#include "wx/wx.h" #include "wx/xrc/xmlres.h" class MyApp: public wxApp { //questo metodo è presente in ogni oggetto wxApp // serve a lanciare la prima finestra e ad altre inizializzazioni. virtual bool OnInit(); }; class MyClass{ public: wxDialog dialog0; wxTextCtrl *text0; wxButton *button0; void ShowDialog(); void OnClickme(wxCommandEvent& event); } ; bool MyApp::OnInit() { wxXmlResource::Get()->InitAllHandlers(); //inizializziamo wxXmlResource::Get()->Load(wxT("gui.xrc")); //carichiamo il file xrc MyClass *MainWin = new MyClass(); //instanziamo la nostra classe responsabile MainWin->ShowDialog(); //del caricamento della nostra gui return true; } //Macro che implementa la main() principale IMPLEMENT_APP(MyApp) //L'implementazione della nostra classe responsabile del caricamento della nostra gui void MyClass::ShowDialog() { //Ricavo il riferimento alla mia finestra principale wxXmlResource::Get()->LoadDialog(&dialog0, NULL, wxT("dialog0")); //Riferimento alla mia casella di testo text0 = XRCCTRL(dialog0, "text0", wxTextCtrl); //Riferimento al mio button button0 = XRCCTRL(dialog0, "button0", wxButton); //Associo l'evento click di button0 il metodo MyClass::OnClickme button0->Bind(wxEVT_BUTTON, &MyClass::OnClickme, this); dialog0.ShowModal(); } void MyClass::OnClickme(wxCommandEvent& event) { text0->ChangeValue("Hai cliccato"); printf("Cliccato!\n"); }
makefile
#Linux CPP = g++ OPTS = `wx-config --cxxflags --libs` #Windows con mxe CPP_WIN32 = i686-w64-mingw32.static-g++ OPTS_WIN32 = `i686-w64-mingw32.static-wx-config --cxxflags --libs` all: make linux #make windows #non funziona richiede wxWidgets 4 e non sono disponibili ancora linux: $(CPP) main.cc -o wxtest $(OPTS) windows: $(CPP_WIN32) main.cc -o wxtest.exe $(OPTS_WIN32) strip wxtest.exe clean: rm wxtest.exe wxtest
Il nostro wiki installa solamente cookie tecnici necessari al funzionamento della piattaforma "Dokuwiki". Niente analitics, statistiche, tracciamenti o altro.