Qt e C++: la classe QList
La classe QList è una classe generica rappresentante una lista.
Tale classe è ottimizzata per gli inserimenti in coda e in testa, per l’accesso tramite indice e per l’accesso tramite iteratore.
La classe QList prevede l’operatore << per l’inserimento di elementi:
QList<QString> list; list << "Antonio" << "Mario" << "Aldo";
L’iterazione all’interno di una QList può essere effettuata con gli iteratori in stile STL o in stile Java:
#include <QList> #include <QString> #include <QDebug> int main() { QList<QString> list; list << "Antonio" << "Mario" << "Aldo"; QListIterator<QString> iter1(list); while(iter1.hasNext()) qDebug() << iter1.next(); QList<QString>::const_iterator iter2; for(iter2 = list.begin(); iter2 != list.end(); iter2++) qDebug() << *iter2; }
Mentre l’accesso agli elementi viene effettuato con l’operatore [] o con il metodo at:
qDebug() << list[0]; qDebug() << list.at(0);
E’ anche possibile utilizzare gli iteratori per modificare la lista:
#include <QList> #include <QString> #include <QDebug> int main() { QList<QString> list; list << "Antonio" << "Mario" << "Aldo"; QMutableListIterator<QString> iter1(list); while(iter1.hasNext()) { iter1.next(); iter1.setValue(iter1.value() + iter1.value()); } QList<QString>::Iterator iter2; for(iter2 = list.begin(); iter2 != list.end(); iter2++) *iter2 = *iter2 + *iter2; foreach(QString item, list) qDebug() << item; }
L’output del programma sarà:
"AntonioAntonioAntonioAntonio" "MarioMarioMarioMario" "AldoAldoAldoAldo"
La classe fornisce inoltre tre metodi per l’inserimento in coda, in testa e in una specifica posizione:
#include <QList> #include <QString> #include <QDebug> int main() { // [] QList<QString> list; // ["Antonio"] list.prepend("Antonio"); // inserimento in coda // ["Gianni, "Antonio"] list.prepend("Gianni"); // ["Gianni, "Antonio", "Massimo"] list.append("Massimo"); // inserimento in testa // ["Gianni", "Antonio", "Makkimo", "Massimo"] list.insert(2, "Makkimo"); // inserimento in una posizione i foreach(QString item, list) qDebug() << item; }
Per la gestione delle liste di QString possiamo utilizzare la classe QStringList (derivata da QList<QString>, che fornisce, in aggiunta, particolari metodi per la gestione di liste di stringhe, come il metodo join:
#include <QStringList> #include <QString> #include <QDebug> int main() { QStringList list; list << "Antonio" << "Makkimo" << "Giuseppe"; QString joined = list.join(", "); // crea una QString qDebug() << joined; list = joined.split(", "); // crea una QStringList foreach(QString item, list) qDebug() << item; }
o il metodo replaceInStrings, per effettuare sostituzioni all’interno di tutte le stringhe della lista:
#include <QStringList> #include <QString> #include <QDebug> int main() { QStringList list; list << "~/Desktop/" << "~/Documenti"<< "~/Immagini"; list.replaceInStrings("~", "/home/antonio"); foreach(QString path, list) qDebug() << path; }
L’output del programma sarà:
"/home/antonio/Desktop/" "/home/antonio/Documenti" "/home/antonio/Immagini"