Il dialogo: differenze tra le versioni
(→refuso) |
(→testo) |
||
Riga 1: | Riga 1: | ||
==Come funziona il lato C++== | ==Come funziona il lato C++== | ||
+ | |||
+ | Per ogni richiesta dello script qml, è necessario preparare del codice C++ che elabori una risposta. | ||
+ | |||
+ | Nel nostro caso, il dialogo è strettamente limitato alla classe UserModel, contenuta nei file [https://github.com/cloc3/sddm/blob/autoCompletion/src/greeter/UserModel.h UserModel.h] e [https://github.com/cloc3/sddm/blob/autoCompletion/src/greeter/UserModel.cpp UserModel.cpp]. | ||
+ | |||
+ | Questa classe, infatti, viene lanciata all'avvio del greeter, accede al file /etc/passwd tramite il programma di libreria getpwent e costruisce la lista utenti nella classe UserModelPrivate. | ||
+ | |||
+ | Per sincronizzare il dialogo con il codice qml è necessario creare tre nuove Q_PROPERTY: | ||
+ | |||
+ | 42 Q_PROPERTY(int initAutoCompletion READ initAutoCompletion CONSTANT) | ||
+ | 43 Q_PROPERTY(QString tail READ tail WRITE setTail) | ||
+ | 44 Q_PROPERTY(QString head READ head WRITE setHead) | ||
+ | |||
+ | Per ciascuna Q_PROPERTY esiste un metodo in lettura che restituisce una risposta con il formato opportuno (int oppure QString).<br> | ||
+ | Le proprietà tail ed head, che possiedono una modalità WRITE, devono anche prevedere due metodi void, dipendenti da un parametro di input. | ||
+ | Dal punto di vista del C++, quindi, il WRITE va inteso come una lettura del parametro ricevuto in input e trascrizione del dato in una opportuna locazione privata. | ||
+ | |||
+ | Noi useremo il metodo sethead(...) per trascrivere ogni singola nuova lettera digitata nel campo degli username, costruire la parte iniziale dello username e avviare la procedura di completamento. | ||
+ | il metodo setTail(...), invece, è una chiamata fake, necessaria per evitare che il campo head sia trattato come una costante. Il metodo head(), invece, rstituisce il completamento dello username. | ||
[[Una_patch_ad_SDDM| torna all'indice]] | [[Una_patch_ad_SDDM| torna all'indice]] |
Versione delle 16:50, 11 ago 2016
Come funziona il lato C++
Per ogni richiesta dello script qml, è necessario preparare del codice C++ che elabori una risposta.
Nel nostro caso, il dialogo è strettamente limitato alla classe UserModel, contenuta nei file UserModel.h e UserModel.cpp.
Questa classe, infatti, viene lanciata all'avvio del greeter, accede al file /etc/passwd tramite il programma di libreria getpwent e costruisce la lista utenti nella classe UserModelPrivate.
Per sincronizzare il dialogo con il codice qml è necessario creare tre nuove Q_PROPERTY:
42 Q_PROPERTY(int initAutoCompletion READ initAutoCompletion CONSTANT) 43 Q_PROPERTY(QString tail READ tail WRITE setTail) 44 Q_PROPERTY(QString head READ head WRITE setHead)
Per ciascuna Q_PROPERTY esiste un metodo in lettura che restituisce una risposta con il formato opportuno (int oppure QString).
Le proprietà tail ed head, che possiedono una modalità WRITE, devono anche prevedere due metodi void, dipendenti da un parametro di input.
Dal punto di vista del C++, quindi, il WRITE va inteso come una lettura del parametro ricevuto in input e trascrizione del dato in una opportuna locazione privata.
Noi useremo il metodo sethead(...) per trascrivere ogni singola nuova lettera digitata nel campo degli username, costruire la parte iniziale dello username e avviare la procedura di completamento. il metodo setTail(...), invece, è una chiamata fake, necessaria per evitare che il campo head sia trattato come una costante. Il metodo head(), invece, rstituisce il completamento dello username.