Sto generalizzando su un paio di librerie GUI, ma a un livello molto alto il concetto più importante che è necessario capire è che una GUI è event driven .
In un'applicazione console l'input dell'utente avviene di solito in determinati punti definiti dall'utente. Tu chiedi al tuo utente, aspetti il suo input, calcoli qualcosa in base a quell'input. Una delle principali differenze è che l'input avviene solo in one , stai leggendo il testo dalla riga di comando ( stdin
in C ++).
In un'applicazione GUI in genere hai più luoghi in cui potrebbe verificarsi l'input, ad esempio pulsanti che eseguono azioni o campi di testo diversi. È qui che entrano in gioco gli eventi. Ad esempio, facendo clic su un pulsante si attiva un evento. Questo evento deve essere gestito da un gestore di eventi , che di solito è solo un metodo che accetta un oggetto evento quando un tale evento viene attivato. Come fa il tuo pulsante a sapere del gestore di eventi? Di solito ti iscrivi (o ascolta ad esso).
Ecco un esempio "ispirato al C ++", questo non è un vero codice QT o C ++.
class MyClickHandler : public ClickListener{
void clickHandler(ClickEvent e){
showAlertBox("The button "+e.getSource().getName()+" has been clicked");
}
};
Quando crei il pulsante, registri un'istanza della classe MyClickHandler rispetto al pulsante.
...
MyClickHandler handler();
Button b("Save");
b.registerListener(handler);
...
Ora ogni volta che il pulsante b
viene cliccato appare una finestra di messaggio che dice "Il pulsante Salva è stato cliccato".
Puoi immaginare che un'applicazione GUI abbia due fasi:
- Stabilire la GUI: un breve periodo all'avvio, in cui tutti gli oggetti vengono creati e collegati tra loro.
- Il ciclo di eventi : la tua GUI si trova in un unico ciclo mentre è in attesa di un evento finché non viene attivato un evento.
Questo è un esempio molto semplice, ma ti consiglierei con qualsiasi framework tu ritenga provi a mostrare una finestra di messaggio quando fai clic su un pulsante.
Per il framework, ce ne sono molti là fuori: nel caso del C ++ probabilmente consiglierei Qt.
Un'ultima parola di consiglio: stai lontano dai progettisti della GUI finché non sai veramente cosa sta succedendo in background. Non è difficile scrivere alcuni semplici esempi e comprendere prima il ciclo degli eventi e poi passare a layout più complessi.