FAQ Qt
FAQ QtConsultez toutes les FAQ
Nombre d'auteurs : 26, nombre de questions : 298, dernière mise à jour : 15 juin 2021
L'écriture dans un fichier texte se fait comme pour la lecture à l'aide de la classe QTextStream. Celle-ci fournit l'opérateur << qui possède énormément de surcharges pour l'écriture dans un fichier. De plus, on peut spécifier le jeu de caractères utilisé pour l'écriture avec la méthode QTextStream::setCodec.
Un exemple : on souhaite écrire le fichier suivant avec le jeu de caractères UTF-8.
Bonjour,
Nous sommes le 3 avril 2009
// Création d'un objet QFile
QFile
file("Qt.txt"
);
// On ouvre notre fichier en lecture seule et on vérifie l'ouverture
if
(!
file.open(QIODevice
::
WriteOnly |
QIODevice
::
Text))
return
;
// Création d'un objet QTextStream à partir de notre objet QFile
QTextStream
flux(&
file);
// On choisit le codec correspondant au jeu de caractères que l'on souhaite ; ici, UTF-8
flux.setCodec("UTF-8"
);
// Écriture des différentes lignes dans le fichier
flux <<
"Bonjour,"
<<
endl <<
"Nous sommes le "
<<
3
<<
" avril "
<<
2009
<<
endl;
La classe QTextStream offre des fonctionnalités intéressantes.
QString
fileName =
"fichier.txt"
;
QFile
fichier(fileName);
fichier.open(QIODevice
::
ReadOnly |
QIODevice
::
Text);
QTextStream
flux(&
fichier);
On peut ensuite lire le fichier de plusieurs façons.
* Intégralement.
QString
tout =
flux.readAll();
* Ligne par ligne.
QString
ligne;
while
(!
flux.atEnd())
{
ligne =
flux.readLine();
//traitement de la ligne
}
* Mot par mot.
QString
mot;
while
(!
stream.atEnd())
{
stream >>
mot;
// traitement du mot
}
La classe QTextStream
offre un moyen simple d'écrire ou de lire du texte, d'en extraire ou d'ajouter des lignes, des mots ou des nombres,
un QTextStream pouvant fonctionner
avec un QIODevice,
une QString ou même
un QByteArray.
Les opérateurs surchargés << et >> permettent d'opérer sur un
QTextStream de façon très simple.
Remarque : Cette classe prend en compte l'encodage du texte.
On peut aussi lire intégralement le contenu d'un fichier sans passer par la classe QTextStream, mais cela nécessite de passer par la classe QByteArray.
QString
fileName =
"fichier.txt"
;
QFile
fichier(fileName);
fichier.open(QIODevice
::
ReadOnly);
QByteArray
data;
data =
fichier.readAll();
QString
ligne(data);
De même, on peut lire le fichier ligne par ligne.
QString
fileName =
"fichier.txt"
;
QFile
fichier(fileName);
fichier.open(QIODevice
::
ReadOnly);
QByteArray
data;
while
(!
fichier.atEnd())
{
data =
fichier.readLine();
QString
ligne(data);
//traitement de la ligne
}
Qt permet facilement d'écrire ou de lire dans un fichier de type binaire. Ceci se fait à l'aide de la classe QFile pour l'ouverture et la fermeture du fichier et de la classe QDataStream pour l'écriture ou la lecture de celui-ci. L'intérêt d'utiliser la classe QDataStream est d'être indépendant de la machine au niveau de l'encodage des octets. Dans les faits cela veut dire qu'un fichier binaire étant écrit à l'aide de la classe QDataStream sous Windows par exemple peut être lu sans problème sous toutes les autres plateformes supportant Qt (Mac, Linux...).
Remarque : par défaut, QDataStream travaille en big-endian.