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:// | ||
+ | Vengono presentati tre esempi. Richiedono l' | ||
+ | ===== esempio da riga di comando ===== | ||
+ | Comando per compilare il seguente codice sorgente | ||
+ | < | ||
+ | <file cpp gui1.h> | ||
+ | #include < | ||
+ | |||
+ | class MiaApp : public wxApp | ||
+ | { | ||
+ | public: | ||
+ | | ||
+ | }; | ||
+ | |||
+ | DECLARE_APP(MiaApp) //vedi gui1.cpp | ||
+ | |||
+ | class MiaCornice : public wxFrame | ||
+ | { | ||
+ | public: | ||
+ | | ||
+ | / | ||
+ | void Uscire(wxCommandEvent& | ||
+ | |||
+ | protected: | ||
+ | | ||
+ | |||
+ | private: | ||
+ | | ||
+ | |||
+ | }; | ||
+ | </ | ||
+ | |||
+ | <file cpp gui1.cpp> | ||
+ | #include < | ||
+ | #ifndef WX_PRECOMP | ||
+ | # | ||
+ | #endif | ||
+ | |||
+ | #include " | ||
+ | |||
+ | BEGIN_EVENT_TABLE(MiaCornice, | ||
+ | EVT_BUTTON(1001, | ||
+ | END_EVENT_TABLE() | ||
+ | |||
+ | IMPLEMENT_APP(MiaApp) //crea il main e il metodo wxGetApp e fa inizializzazioni | ||
+ | |||
+ | bool MiaApp:: | ||
+ | { | ||
+ | | ||
+ | | ||
+ | // | ||
+ | | ||
+ | } | ||
+ | |||
+ | MiaCornice:: | ||
+ | { | ||
+ | b1 = new wxButton(this, | ||
+ | } | ||
+ | |||
+ | void MiaCornice:: | ||
+ | { | ||
+ | | ||
+ | } | ||
+ | </ | ||
+ | ===== esempio con wxformbuilder ===== | ||
+ | ==== Premessa ==== | ||
+ | Con [[http:// | ||
+ | Non devo modificare il codice generato da wxformbuilder (MyFrame.cpp) perché la classe base non deve contenere l' | ||
+ | |||
+ | 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' | ||
+ | * 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??? | ||
+ | - 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' | ||
+ | * 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 | ||
+ | * < | ||
+ | |||
+ | {{appunti3s: | ||
+ | ===== esempio completo ===== | ||
+ | |||
+ | ====Legenda delle icone==== | ||
+ | * cartella blu: {{: | ||
+ | * cartella gialla: {{: | ||
+ | * cartella marrone: {{: | ||
+ | |||
+ | ==== Esempio ==== | ||
+ | - Aprire codelite | ||
+ | - nel menu Workspace | ||
+ | * new workspace (selezionare checkbox " | ||
+ | * new project (selezionare GUI wxFrame e selezionare checkbox " | ||
+ | * 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à " | ||
+ | * 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 < | ||
+ | * sostituire < | ||
+ | - main.cpp | ||
+ | * cancellare 4 elementi in fondo: costruttore, | ||
+ | - mainframe.h | ||
+ | * niente da fare | ||
+ | - mainframe.cpp | ||
+ | * il costruttore viene completamente ereditato (rimane vuoto) | ||
+ | * implementare SOLO quello che è suggerito dal commento < | ||
+ | * 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' | ||
+ | * premere CTRL+F5 (Run) | ||
+ | * la modalità Debug produce errore su debian e ubuntu: in casi disperati usare [[appunti3s: | ||
+ | |||
+ | {{appunti3s: |
appunti3s/libreria_wxwidget.txt · Last modified: 2020/06/08 22:19 by 127.0.0.1