User Tools

Site Tools


appunti3s:libreria_wxwidget
no way to compare when less than two revisions

Differences

This shows you the differences between two versions of the page.


appunti3s:libreria_wxwidget [2020/06/08 22:19] (current) – created - external edit 127.0.0.1
Line 1: Line 1:
 +====== Libreria Wxwidget ======
 +{{http://wxwidgets.org/}}
 +Vengono presentati tre esempi. Richiedono l'installazione delle librerie wxwidget, di codelite e di wxformbuilder
 +===== esempio da riga di comando =====
 +Comando per compilare il seguente codice sorgente
 +<code>g++ gui1.cpp `wx-config --libs` `wx-config --cxxflags` -o gui1</code>
  
 +<file cpp gui1.h>
 +#include <wx/app.h>
 +
 +class MiaApp : public wxApp
 +{
 +public: 
 +   virtual bool OnInit();
 +};
 +
 +DECLARE_APP(MiaApp) //vedi gui1.cpp
 +
 +class MiaCornice : public wxFrame
 +{
 +public:
 +   MiaCornice(const wxString &title, const wxPoint &pos, const wxSize &size);
 +   /*~MiaCornice();*/
 +   void Uscire(wxCommandEvent& event);
 +   
 +protected:
 +   DECLARE_EVENT_TABLE() //vedi gui1.cpp
 +
 +private:
 +   wxButton* b1;
 +
 +};
 +</file>
 +
 +<file cpp gui1.cpp>
 +#include <wx/wxprec.h>
 +#ifndef WX_PRECOMP
 +#       include <wx/wx.h>
 +#endif
 +
 +#include "gui1.h"
 +
 +BEGIN_EVENT_TABLE(MiaCornice,wxFrame) //associa ad ogni evento un metodo di getione
 + EVT_BUTTON(1001,MiaCornice::Uscire)
 +END_EVENT_TABLE()
 +
 +IMPLEMENT_APP(MiaApp) //crea il main e il metodo wxGetApp e fa inizializzazioni
 +
 +bool MiaApp::OnInit()
 +{
 +   MiaCornice *finestra1 = new MiaCornice(_T("titolodellafinestra!"), wxDefaultPosition,wxSize(300, 200));
 +   finestra1->Show(true);
 +   //SetTopWindow(finestra1);
 +   return true;
 +}
 +
 +MiaCornice::MiaCornice(const wxString& title, const wxPoint& pos, const wxSize& size): wxFrame((wxFrame *) NULL, -1, title, pos, size)
 +{
 +   b1 = new wxButton(this,1001,_T("pulsante....."),wxDefaultPosition, wxDefaultSize, 0);
 +}
 +
 +void MiaCornice::Uscire(wxCommandEvent& event)
 +{
 +   Close(true);
 +}
 +</file>
 +===== esempio con wxformbuilder =====
 +==== Premessa ====
 +Con [[http://wxformbuilder.org|wxformbuilder]] costruisco solo la Classe Base per la finestra (MyFrame).
 +Non devo modificare il codice generato da wxformbuilder (MyFrame.cpp) perché la classe base non deve contenere l'implementazione dei metodi (astratti).
 +
 +Creo invece una classe Derivata (MiaCornice) a partire dalla classe Base creata da wxformbuilder (MyFrame) in modo che ne erediti tutti gli attributi e tutti i metodi.
 +Poi implemento dentro la classe Derivata (MiaCornice) tutti i metodi di cui ho bisogno (per gestire gli eventi).
 +
 +==== Esempio guidato ====
 +  - aprire wxformbuilder
 +  - (a destra) c'e' un progetto vuoto con delle propietà da modificare (a sinistra)
 +    * name: nome del progetto, a piacere...
 +    * path: cartella dove salva i file di codice generato automaticamente
 +    * file: nome del file che conterrà la classe Base (da NON modificare) es: MyFrame
 +    * namespace: a piacere MioNameSpace??? NON FUNZIONA???
 +  - aprire la scheda Form 
 +    * click prima icona a sinistra, crea una classe (NON UN OGGETTO) tipo wxFrame
 +    * (a destra) c'è un object (NON UN OGGETTO!) con delle proprietà da modificare (a sinistra)
 +    * name: a piacere es: MyFrame
 +    * title: testo sulla barra del titolo a piacere: Titolone blu
 +  - scheda Layout
 +    * click prima icona a sinistra, crea un oggetto tipo wxBoxSizer
 +    * a destra c'è un oggetto, a sinistra le proprietà da modificare
 +    * name: a piacere es: myBSizer1
 +  - Scheda Menu Toolbar
 +    * click prima icona a sinistra, crea un oggetto tipo wxStatusBar
 +    * a destra c'è un oggetto, a sinistra le proprietà da modificare
 +    * name: a piacere es: m_StatusBar1
 +    * fields: numero campi es: 2
 +  - Scheda Menu Toolbar
 +    * click seconda icona a sinistra, crea un oggetto tipo wxMenuBar
 +    * a destra c'è un oggetto, a sinistra le proprietà da modificare
 +    * name: a piacere es: m_MenuBar1
 +    * label: non viene visualizzato??
 +  - Scheda Menu Toolbar
 +    * click terza icona a sinistra, crea un oggetto tipo wxMenu
 +    * a destra c'è un oggetto, a sinistra le proprietà da modificare
 +    * name: a piacere es: m_Menu1
 +    * label: a piacere es: &File
 +  - Scheda Menu Toolbar
 +    * click quinta icona a sinistra, crea un oggetto tipo wxMenuItem
 +    * a destra c'è un oggetto, a sinistra le proprietà da modificare)
 +    * name: a piacere es: m_MenuQuit
 +    * label: a piacere es: quit...
 +    * id: e' il nome di una costante, che viene automaticamente definita usando #define...
 +    * di questo oggetto di devono modificare anche gli events(a sinistra): OnMenuSelect __Uscire__ (Cioè si indica solo il nome del metodo, senza parametri)
 +  - premere F6
 +    * selezionare la classe Base (MyFrame)
 +    * indicare il nome della futura classe derivata (MiaCornice)
 +    * indicare il nome del file (MiaCornice)
 +    * Generare il codice della classe DERIVATA nella cartella scelta al punto 2
 +  - premere F8
 +    * Generare il codice della classe BASE nella cartella scelta al punto 2
 +  - salvare e uscire
 +  - creare main.cpp e main.h
 +    * dentro main.cpp si deve scrivere una macro che sostituisce il main() e creare l'oggetto finestra1 dentro il costruttore MiaApp::MiaApp()
 +    * dentro main.h si deve scrivere una macro e includere gli altri file.h
 +  - editare MiaCornice.cpp
 +    * dentro cui bisogna solo implementare i metodi (Uscire) con il suggerimento // TO DO..//
 +  - per compilare tutto, eseguire il comando
 +    * <code> g++ main.cpp MiaCornice.cpp MyFrame.cpp `wx-config --libs` `wx-config --cxxflags` </code>
 +
 +{{appunti3s:codice1.zip}}
 +===== esempio completo =====
 +
 +====Legenda delle icone====
 +  * cartella blu: {{:appunti3s:blu.gif?|}} workspace
 +  * cartella gialla: {{:appunti3s:oro.gif?|}} project
 +  * cartella marrone: {{:appunti3s:marrone.gif?|}} virtual folder
 +
 +==== Esempio ====
 +  - Aprire codelite
 +  - nel menu Workspace
 +    * new workspace (selezionare checkbox "separate directory")
 +    * new project (selezionare GUI wxFrame e selezionare checkbox "separate directory")
 +    * espandere le cartelle virtuali ed aprire gui.cpp e gui.h
 +  - nella virtual folder RESOURCE (marrone)
 +    * tasto destro sul file **gui.fbp** (open with wxformbuilder)
 +    * versione diversa...? risposta: yes!
 +  - dentro wxformbuilder
 +    * si potrebbe non modificare nulla
 +    * attenzione a NON modificare il nome del progetto (gui)
 +    * del progetto si può modificare la proprietà "event_generation TABLE"
 +    * attenzione a NON modificare il nome del Frame (MainFrameBase)
 +    * Ogni elemento a cui verrà associato un evento dovrà avere un ID unico: modificare wxID_ANY sostituendolo con una cosa a piacere (Esempio: wxID_MYBUTTON1)
 +    * modificare poi quello tutto che si desidera...
 +    * salvare il progetto
 +    * il codice autogenerato da wxformbuilder (gui.cpp, gui.h) è diverso da quello di codelite
 +    * esportarlo sovrascrivendo i file originali (premendo F8)
 +    * leggi sulla barra di stato: code generated!
 +    * Generare una classe derivata premendo F6: importante usare questi nomi (MainFrame, mainframe)
 +    * chiudere wxformbuilder
 +  - di nuovo dentro codelite
 +    * se gui.cpp era stato aperto, codelite si accorge delle modifiche, chiederà: reload modified file? (ok!)
 +    * tasto destro sul project (giallo) > Import Files from Dir 
 +    * correggere il percorso e selezionare la check box (non è mai selezionata)
 +  - gui.cpp e gui.h //DO NOT MODIFY...// 
 +  - main.h (per capire confrontarlo con mainframe.h) 
 +    * cancellare sotto <code>//main application frame declaration// </code> ECCETTO <code>#end_if</code> perché quel codice si trova già in mainframe.h
 +    * sostituire <code>#include "gui.h"</code> con <code>#include "mainframe.h"</code> perché la classe dentro gui.h è solo la classe base.
 +  - main.cpp
 +    * cancellare 4 elementi in fondo: costruttore, distruttore e due metodi (ora si trovano in mainframe.cpp) perché si trovano in mainframe.cpp
 +  - mainframe.h
 +    * niente da fare
 +  - mainframe.cpp
 +    * il costruttore viene completamente ereditato (rimane vuoto) 
 +    * implementare SOLO quello che è suggerito dal commento <code>//TO DO// </code>
 +    * NB: per esempio, per chiudere la finestra usare Destroy();
 +  - Compilazione
 +    * Prima di compilare assicurarsi di NON essere in debug, ma in release. 
 +    * premere F7 (build)
 +    * viene creata la cartella RELEASE contenente i file oggetto
 +    * l'eseguibile ha il nome del Project
 +    * premere CTRL+F5 (Run)
 +    * la modalità Debug produce errore su debian e ubuntu: in casi disperati usare [[appunti3s:gdb]]
 +
 +{{appunti3s:codice4.zip}}
appunti3s/libreria_wxwidget.txt · Last modified: 2020/06/08 22:19 by 127.0.0.1