Il dialogo: differenze tra le versioni
m (→refusi) |
(→Come funziona il lato C++) |
||
Riga 16: | Riga 16: | ||
La proprietà '''initAutoCompletion''', ad esempio, è una variabile costante in sola lettura, che viene invocata una sola volta e restituisce il valore zero. Volendo, potrebbe restituire un valore numerico indicativo di un particolare stato di uscita. | La proprietà '''initAutoCompletion''', ad esempio, è una variabile costante in sola lettura, che viene invocata una sola volta e restituisce il valore zero. Volendo, potrebbe restituire un valore numerico indicativo di un particolare stato di uscita. | ||
− | Le variabili '''head''' e '''tail''', invece, hanno una funzione più complessa, che non ammette una uscita costante. | + | Le variabili '''head''' e '''tail''', invece, hanno una funzione più complessa, che non ammette una uscita costante. |
+ | 290 QString UserModel::tail() {return privateTail;} | ||
+ | 291 QString UserModel::head() {return privateHead;} | ||
+ | 292 void UserModel::setTail(QString tail) {return;} | ||
+ | 293 void UserModel::setHead(QString inputString) { | ||
+ | 294 QChar inputChar=inputString.at(0); | ||
+ | ... un sacco di codice | ||
+ | 326 } | ||
+ | |||
'''head''', ad esempio, dipende dalla successione delle lettere composte durante la digitazione dello username.<br> | '''head''', ad esempio, dipende dalla successione delle lettere composte durante la digitazione dello username.<br> | ||
Il metodo '''setHead''' dipende da un parametro di input, che trasmette l'ultima lettera digitata. Questa viene acquisita e trascritta in una stringa che ricostruisce il valore corrente della chiave di ricerca, cioè la parte iniziale dello username.<br> | Il metodo '''setHead''' dipende da un parametro di input, che trasmette l'ultima lettera digitata. Questa viene acquisita e trascritta in una stringa che ricostruisce il valore corrente della chiave di ricerca, cioè la parte iniziale dello username.<br> |
Versione delle 18:35, 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 deve esistere almeno un metodo in lettura che restituisce una risposta con il formato opportuno (int oppure QString).
La proprietà initAutoCompletion, ad esempio, è una variabile costante in sola lettura, che viene invocata una sola volta e restituisce il valore zero. Volendo, potrebbe restituire un valore numerico indicativo di un particolare stato di uscita.
Le variabili head e tail, invece, hanno una funzione più complessa, che non ammette una uscita costante.
290 QString UserModel::tail() {return privateTail;} 291 QString UserModel::head() {return privateHead;} 292 void UserModel::setTail(QString tail) {return;} 293 void UserModel::setHead(QString inputString) { 294 QChar inputChar=inputString.at(0); ... un sacco di codice 326 }
head, ad esempio, dipende dalla successione delle lettere composte durante la digitazione dello username.
Il metodo setHead dipende da un parametro di input, che trasmette l'ultima lettera digitata. Questa viene acquisita e trascritta in una stringa che ricostruisce il valore corrente della chiave di ricerca, cioè la parte iniziale dello username.
Il metodo setHead si occupa anche di costruire il completamento, che viene conservato in attesa di una accesso in lettura tramite la chiamata di tail
Il metodo setTail, invece, è una chiamata fake, necessaria per impedire che la variabile tail sia considerata come una costante, generando errori di compilazione. volendo, setTail potrebbe farsi carico di quella parte di codice di setHead responsabile del completamento.