Visualizzazione post con etichetta qt. Mostra tutti i post
Visualizzazione post con etichetta qt. Mostra tutti i post

sabato 23 maggio 2015

Qt compie 20 anni

Il mondo sta festeggiando 20 anni di Qt.
Come vola il tempo.
Per chi non lo sapesse Qt è un framework grafico che si è molto esteso nel tempo. E' scritto in C++, originariamente da TrollTech, una ditta norvegese. L'utilizzo forse piu' ampio e conosciuto di Qt è nel desktop grafico KDE.

Personalmente ho incontrato Qt per caso, nel 1999. O meglio, ero già al corrente di Qt, ma non avevo mai guardato sotto al cofano. Ebbene nel 1999 ho trovato un articolo su Linux Magazine che spiegava come creare una piccola applicazione grafica con le librerie KDE, che in effetti ricordano molto quelle di Qt sulle quali si appoggiano.
Da lì ho iniziato a esplorare l'universo Qt, facendo arrivare anche il Tucano Book (http://shop.oreilly.com/product/9781565925885.do). Ahimé, nonostante l'interesse costante per Qt, non ho mai avuto l'opportunità di usarlo in un progetto di produzione, ma solo per piccoli progetti personali.

Qt mi ha insegnato molte cose.
Anzitutto la documentazione è eccellente (specialmente se comparata a quella delle KDELibs, che a mio parere è lacunosa).
L'API è straordinariamente semplice e coerente, cosa che non ho trovato in nessun altro framework analogo.
La gestione della persistenza database è semplicemente disarmante: nessun altro framework/ORM riesce a dare gli stessi risultati in termini di codice.
Il codice risultante è sempre compatto, chiaro, e conciso.
Il concetto di signal/slot è apparentemente piu' complesso rispetto a quello di eventi/handler di altri framework, ma alla fine risulta di gran lunga piu' elengate.

Qt è definitivamente per me l'esempio di come dovrebbe essere una libreria.

mercoledì 8 gennaio 2014

Framework 5

E' di ieri la notizia del rilascio del Framework 5, l'infrastruttura che sara' alla base della nuova versione del KDE.
Pur essendo una Technology Preview, e quindi non stabile, questa notizia e' molto importante per il mondo Open Source: non si tratta infatti di una "semplice" evoluzione di uno dei desktop piu' conosciuti e utilizzati, bensi' di un vero e proprio Framework di sviluppo rapido. Come riporta infatti l'annuncio:

Through KDE Frameworks efforts, these libraries have been methodically reworked into a set of independent, cross platform modules that will be readily available to all Qt developers.

The KDE Frameworks—designed as drop-in Qt Addons—will enrich Qt as a development environment with functions that simplify, accelerate and reduce the cost of Qt development. Frameworks eliminate the need to reinvent key functions.

In altre parole, pur rimanendo KDE-focused, il framework 5 potra' essere sfruttato anche da applicazioni non-KDE (purche' Qt) apportando vantaggi di sviluppo e integrazione a tutto tondo.
Ritengo che questa decisione potra' giovare enormemente alla diffusione di KDE: se uno sviluppatore trarra' beneficio dal Frameowkr 5 anche fuori dal contesto KDE sara' maggiormente invogliato a completare la migrazione verso il desktop.

domenica 26 maggio 2013

Verso Qt 5

Aron Seigo in questo post spiega che la versione 4.11 di KDE sarà importante per due motivi fondamentali: il long term support e il passaggio a QT 5. La 4.11 infatti sarà l'ultima release basata su Qt 4.
La nuova versione di KDE sarà basata sul Plasma Workspace 2, a sua volta appunto basato su Qt 5.

lunedì 14 maggio 2012

Qt Creator 2.5

E' uscita oggi la nuova versione del Qt Creator, la 2.5, che fra le altre migliorie include un minimale supporto per l'azione extract method in modalità refactoring. Ho provato quasi subito la funzione e devo dire che il supporto è proprio minimale: del metodo da estrarre viene chiesto solo il nome e non il prototipo. Questo significa che non è possibile specificare tipo di ritorno e lista dei parametri, come pure la visibilità (default a public). Anche il punto di inserimento del metodo appare abbastanza rudimentale, visto che il metodo viene messo subito prima quello corrente spostando anche gli eventuali commenti che risultano quindi sbagliati. Insomma, c'è ancora molto lavoro da fare, ma sono sicuro che una volta completata questa feature darà i suoi frutti.
Apparentemente la versione di FreeBSD presente nei ports è ancora la 2.0.1, come pure quella disponibile come PBI, anche se il port è stato aggiornato e molto presto lo sarà anche il PBI.

domenica 13 maggio 2012

Ottenere lo username e il nome del gruppo principale in Linux

Seppur semplice e scontato, riporto qui un pezzo di codice C che consente la scoperta dello username dell'utente che sta attualmente eseguendo l'applicazione e l'ottenimento del nome del primo gruppo a cui l'utente appartiene:

QString getUsername()
{ 
  // get the data about the user using the getpwuid(2) system call
  uid_t  currentUID_t   = getuid();
  struct passwd *st_pwd = getpwuid( currentUID_t );
 
 
  if( st_pwd != NULL )
    // convert the string with the username into a "good" string
    return QString::fromLatin1( st_pwd->pw_name );
  else
    // error !
    return QString::number( currentUID_t );
}


QString getGroupname()
{ 
  // get the data about the user using the getpwuid(2) system call
  uid_t  currentUID_t   = getuid();
  struct passwd *st_pwd = getpwuid( currentUID_t );
  gid_t currentGID_t     = getgid();
 
  int ngroups = 1;      // number of groups to be retrieved
  gid_t *st_groups;
  st_groups = (gid_t*) malloc( sizeof( gid_t ) * ngroups );
  getgrouplist( st_pwd->pw_name,
                currentGID_t,
                st_groups,
                &ngroups
  );
 
 
  if( st_groups != NULL ){
    // convert the string with the username into a "good" string
    group* groupID = getgrgid( st_groups[0] );
    return QString::fromLatin1( groupID->gr_name );
  }
  else
    // error !
    return QString::number( currentGID_t );
}


Le due funzioni restituiscono entrambe un oggetto QString che può quindi essere utilizzato in una applicazione Qt/KDE. Nel caso particolare di KDE conviene invece utilizzare l'oggetto di libreria KUser che alla sua creazione effettua autonomamente l'aggancio allo username e alla lista dei gruppi:

KUser user;
user.loginName();
user.groupNames().at( 0 );




sabato 12 maggio 2012

Variabili multicolore

KDevelop è l'IDE di riferimento per lo sviluppo KDE, e io lo uso anche come IDE per progetti php. Una caratteristica interessante dell'IDE è la colorazione delle variabili: ad ogni nome di variabile l'IDE associa un colore random (fino ad un certo numero di scelte, dopodiché il colore rimane lo stesso verde scuro). Il risultato è che il codice appare molto colorato come mostrato qui sotto.

Se comparato al cugino QtCreator o al piu' famoso Eclipse, questo effetto arcobaleno può a prima vista spiazzare e sembrare esagerato. Quello che segue è un frammento di codice in QtCreator (notare che le variabili hanno tutte lo stesso colore rosso):


Ancora piu' scarno risulta lo stesso pezzo di codice del primo esempio in Emacs:

 

Ma serve realmente l'effetto di colorazione di KDevelop? 
All'inizio ero piuttosto scettico, e questo effetto rainbow mi distraeva piu' che aiutarmi. A forza di lavorare con questo IDE però ho compreso l'utilita' di questa funzione, che illustro con un esempio pratico:

 

Ovviamente il pezzo di codice di cui sopra è volutamente ridicolo e ha il solo scopo di mostrare l'uso della colorazione random delle variabili. Notato nulla di sbagliato? Si sta invocando il metodo QString.toAscrii() su una variabile sbagliata, che non è di tipo QString. In questo caso quindi la colorazione delle variabili ci permette di identificare anche il tipo delle variabili (entro certi limiti) e di capire che la variabile alla quale si fa riferimento è effettivamente quella desiderata e non un'altra variabile dal nome simile. Il caso di cui sopra si sarebbe potuto evitare anche con l'uso della code completion di KDevelop (e di ogni buon IDE), ma si pensi a cosa succede nel caso di utilizzo di un operatore: in tale situazione l'identificazione visiva rapida di una variabile permette di evitare grossolani errori.