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"