QDataStream Class
La classe QDataStream permet de sérialiser des données binaires sur un site QIODevice. Plus....
| En-tête : | #include <QDataStream> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Core)target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake : | QT += core |
| Hérite : | QIODeviceBase |
- Liste de tous les membres, y compris les membres hérités
- Membres dépréciés
- QDataStream fait partie de Entrée/Sortie et Réseau.
Remarque : toutes les fonctions de cette classe sont réentrantes.
Types publics
| enum | ByteOrder { BigEndian, LittleEndian } |
| enum | FloatingPointPrecision { SinglePrecision, DoublePrecision } |
| enum | Status { Ok, ReadPastEnd, ReadCorruptData, WriteFailed, SizeLimitExceeded } |
| enum | Version { Qt_1_0, Qt_2_0, Qt_2_1, Qt_3_0, Qt_3_1, …, Qt_6_11 } |
Fonctions publiques
| QDataStream() | |
| QDataStream(QIODevice *d) | |
| QDataStream(const QByteArray &a) | |
| QDataStream(QByteArray *a, QIODeviceBase::OpenMode mode) | |
| ~QDataStream() | |
| void | abortTransaction() |
| bool | atEnd() const |
| QDataStream::ByteOrder | byteOrder() const |
| bool | commitTransaction() |
| QIODevice * | device() const |
| QDataStream::FloatingPointPrecision | floatingPointPrecision() const |
(since 6.7) QDataStream & | readBytes(char *&s, qint64 &l) |
| qint64 | readRawData(char *s, qint64 len) |
| void | resetStatus() |
| void | rollbackTransaction() |
| void | setByteOrder(QDataStream::ByteOrder bo) |
| void | setDevice(QIODevice *d) |
| void | setFloatingPointPrecision(QDataStream::FloatingPointPrecision precision) |
| void | setStatus(QDataStream::Status status) |
| void | setVersion(int v) |
| qint64 | skipRawData(qint64 len) |
| void | startTransaction() |
| QDataStream::Status | status() const |
| int | version() const |
| QDataStream & | writeBytes(const char *s, qint64 len) |
| qint64 | writeRawData(const char *s, qint64 len) |
(since 6.10) | operator bool() const |
| QDataStream & | operator<<(qint8 i) |
| QDataStream & | operator<<(bool i) |
(since 6.0) QDataStream & | operator<<(char16_t c) |
(since 6.0) QDataStream & | operator<<(char32_t c) |
| QDataStream & | operator<<(const char *s) |
| QDataStream & | operator<<(double f) |
| QDataStream & | operator<<(float f) |
| QDataStream & | operator<<(qint16 i) |
| QDataStream & | operator<<(qint32 i) |
| QDataStream & | operator<<(qint64 i) |
| QDataStream & | operator<<(quint16 i) |
| QDataStream & | operator<<(quint32 i) |
| QDataStream & | operator<<(quint64 i) |
| QDataStream & | operator<<(quint8 i) |
| QDataStream & | operator<<(std::nullptr_t ptr) |
| QDataStream & | operator>>(bool &i) |
| QDataStream & | operator>>(qint8 &i) |
| QDataStream & | operator>>(char *&s) |
(since 6.0) QDataStream & | operator>>(char16_t &c) |
(since 6.0) QDataStream & | operator>>(char32_t &c) |
| QDataStream & | operator>>(double &f) |
| QDataStream & | operator>>(float &f) |
| QDataStream & | operator>>(qint16 &i) |
| QDataStream & | operator>>(qint32 &i) |
| QDataStream & | operator>>(qint64 &i) |
| QDataStream & | operator>>(quint16 &i) |
| QDataStream & | operator>>(quint32 &i) |
| QDataStream & | operator>>(quint64 &i) |
| QDataStream & | operator>>(quint8 &i) |
| QDataStream & | operator>>(std::nullptr_t &ptr) |
Non-membres apparentés
(since 6.0) QDataStream & | operator<<(QDataStream &out, const std::pair<T1, T2> &pair) |
(since 6.0) QDataStream & | operator>>(QDataStream &in, std::pair<T1, T2> &pair) |
Description détaillée
Un flux de données est un flux binaire d'informations codées qui est totalement indépendant du système d'exploitation de l'ordinateur hôte, de l'unité centrale ou de l'ordre des octets. Par exemple, un flux de données écrit par un PC sous Windows peut être lu par un Sun SPARC sous Solaris.
Vous pouvez également utiliser un flux de données pour lire/écrire raw unencoded binary data. Si vous souhaitez un flux d'entrée "analysant", voir QTextStream.
La classe QDataStream implémente la sérialisation des types de données de base de C++, comme char, short, int, char *, etc. La sérialisation de données plus complexes s'effectue en divisant les données en unités primitives.
Un flux de données coopère étroitement avec un QIODevice. Un QIODevice représente un support d'entrée/sortie à partir duquel il est possible de lire et d'écrire des données. La classe QFile est un exemple de périphérique d'entrée/sortie.
Exemple (écriture de données binaires dans un flux) :
QFile file("file.dat"); file.open(QIODevice::WriteOnly); QDataStream out(&file); // we will serialize the data into the file out << QString("the answer is"); // serialize a string out << (qint32)42; // serialize an integer
Exemple (lecture de données binaires à partir d'un flux) :
QFile file("file.dat"); file.open(QIODevice::ReadOnly); QDataStream in(&file); // read the data serialized from the file QString str; qint32 a; in >> str >> a; // extract "the answer is" and 42
Chaque élément écrit dans le flux est écrit dans un format binaire prédéfini qui varie en fonction du type de l'élément. Les types Qt pris en charge sont QBrush, QColor, QDateTime, QFont, QPixmap, QString, QVariant et bien d'autres. Pour obtenir la liste complète de tous les types Qt supportant le flux de données, voir Serializing Qt Data Types.
Pour les entiers, il est préférable de toujours utiliser un type d'entier Qt pour l'écriture et de lire le même type d'entier Qt. Cela permet d'obtenir des entiers de la taille souhaitée et de s'affranchir des différences entre les compilateurs et les plates-formes.
Les énumérations peuvent être sérialisées par l'intermédiaire de QDataStream sans qu'il soit nécessaire de définir manuellement des opérateurs de flux. Les classes d'énumérations sont sérialisées en utilisant la taille déclarée.
Le périphérique d'E/S initial est généralement défini dans le constructeur, mais il peut être modifié à l'aide de setDevice(). Si vous avez atteint la fin des données (ou si aucun périphérique d'E/S n'a été défini), atEnd() renvoie un résultat positif.
Sérialisation des conteneurs et des chaînes de caractères
Le format de sérialisation est d'abord un spécificateur de longueur, puis l octets de données. Le spécificateur de longueur est un quint32 si la version est inférieure à 6.7 ou si le nombre d'éléments est inférieur à 0xfffffffe (2^32 -2). Sinon, il y a une valeur d'extension 0xfffffffe suivie d'un quint64 avec la valeur réelle. De plus, pour les conteneurs qui supportent isNull(), il est encodé comme un simple quint32 avec tous les bits activés et aucune donnée.
Pour prendre un exemple, si la taille de la chaîne tient dans 32 bits, une chaîne char * est écrite sous la forme d'un entier de 32 bits égal à la longueur de la chaîne, y compris l'octet '\0', suivi de tous les caractères de la chaîne, y compris l'octet '\0'. Si la taille de la chaîne est supérieure, la valeur 0xffffffffe est écrite comme marqueur d'une taille étendue, suivie de 64 bits de la taille réelle. Lors de la lecture d'une chaîne char *, 4 octets sont lus en premier. Si la valeur n'est pas égale à 0xffffffffe (le marqueur de taille étendue), ces 4 octets sont traités comme la taille de 32 bits de la chaîne. Sinon, les 8 octets suivants sont lus et considérés comme la taille de 64 bits de la chaîne. Ensuite, tous les caractères de la chaîne char *, y compris le terminateur '\0', sont lus.
Version
Le format binaire de QDataStream a évolué depuis Qt 1.0, et continuera probablement à évoluer pour refléter les changements effectués dans Qt. Lors de l'entrée ou de la sortie de types complexes, il est très important de s'assurer que la même version du flux (version()) est utilisée pour la lecture et l'écriture. Si vous avez besoin d'une compatibilité ascendante et descendante, vous pouvez coder en dur le numéro de version dans l'application :
stream.setVersion(QDataStream::Qt_4_0);
Si vous produisez un nouveau format de données binaires, tel qu'un format de fichier pour les documents créés par votre application, vous pouvez utiliser un QDataStream pour écrire les données dans un format portable. En règle générale, vous écrivez un bref en-tête contenant une chaîne magique et un numéro de version afin de vous ménager une marge de manœuvre en vue d'une expansion future. Par exemple :
QFile file("file.xxx"); file.open(QIODevice::WriteOnly); QDataStream out(&file); // Write a header with a "magic number" and a version out << (quint32)0xA0B0C0D0; out << (qint32)123; out.setVersion(QDataStream::Qt_4_0); // Write the data out << lots_of_interesting_data;
Puis lisez-le avec :
QFile file("file.xxx"); file.open(QIODevice::ReadOnly); QDataStream in(&file); // Read and check the header quint32 magic; in >> magic; if (magic != 0xA0B0C0D0) return XXX_BAD_FILE_FORMAT; // Read the version qint32 version; in >> version; if (version < 100) return XXX_BAD_FILE_TOO_OLD; if (version > 123) return XXX_BAD_FILE_TOO_NEW; if (version <= 110) in.setVersion(QDataStream::Qt_3_1); else in.setVersion(QDataStream::Qt_4_0); // Read the data in >> lots_of_interesting_data; if (version >= 120) in >> data_new_in_XXX_version_1_2; in >> other_interesting_data;
Vous pouvez sélectionner l'ordre des octets à utiliser lors de la sérialisation des données. Le réglage par défaut est big-endian (MSB en premier). Le changer en little-endian rompt la portabilité (à moins que le lecteur ne change également en little-endian). Nous vous recommandons de conserver ce paramètre, à moins que vous n'ayez des exigences particulières.
Lecture et écriture de données binaires brutes
Vous pouvez souhaiter lire/écrire vos propres données binaires brutes directement dans le flux de données. Les données peuvent être lues à partir du flux dans un espace préaffecté char * en utilisant readRawData(). De même, les données peuvent être écrites dans le flux en utilisant writeRawData(). Notez que tout encodage/décodage des données doit être effectué par vous.
Une paire de fonctions similaires est readBytes() et writeBytes(). Elles diffèrent de leurs homologues brutes de la manière suivante : readBytes() lit un quint32 qui est considéré comme la longueur des données à lire, puis ce nombre d'octets est lu dans l'espace préalloué char *; writeBytes() écrit un quint32 contenant la longueur des données, suivi des données. Notez que tout encodage/décodage des données (en dehors de la longueur quint32) doit être effectué par vous.
Lecture et écriture des classes de collection Qt
Les classes de conteneurs Qt peuvent également être sérialisées dans un QDataStream. Il s'agit notamment de QList, QSet, QHash et QMap. Les opérateurs de flux sont déclarés comme non-membres des classes.
Lecture et écriture d'autres classes Qt
En plus des opérateurs de flux surchargés documentés ici, toutes les classes Qt que vous pourriez vouloir sérialiser dans un QDataStream auront des opérateurs de flux appropriés déclarés comme non-membres de la classe :
QDataStream &operator<<(QDataStream &, const QXxx &); QDataStream &operator>>(QDataStream &, QXxx &);
Par exemple, voici les opérateurs de flux déclarés comme non-membres de la classe QImage:
QDataStream &operator<<(QDataStream &stream, const QImage &image); QDataStream &operator>>(QDataStream &stream, QImage &image);
Pour savoir si votre classe Qt préférée possède des opérateurs de flux similaires, consultez la section Related Non-Members de la page de documentation de la classe.
Utilisation des transactions de lecture
Lorsqu'un flux de données fonctionne sur un périphérique asynchrone, les morceaux de données peuvent arriver à des moments arbitraires. La classe QDataStream met en œuvre un mécanisme de transaction qui permet de lire les données de manière atomique à l'aide d'une série d'opérateurs de flux. Par exemple, vous pouvez gérer des lectures incomplètes à partir d'un socket en utilisant une transaction dans un slot connecté au signal readyRead() :
in.startTransaction(); QString str; qint32 a; in >> str >> a; // try to read packet atomically if (!in.commitTransaction()) return; // wait for more data
Si aucun paquet complet n'est reçu, ce code rétablit le flux à sa position initiale, après quoi il faut attendre que d'autres données arrivent.
Corruption et sécurité
QDataStream n'est pas résistant aux entrées de données corrompues et ne doit donc pas être utilisé dans des situations sensibles sur le plan de la sécurité, même en cas d'utilisation de transactions. Les transactions permettent de déterminer si une entrée valide peut être décodée avec les données actuellement disponibles sur un périphérique asynchrone, mais elles supposent que les données disponibles sont correctement formées.
En outre, de nombreux opérateurs de démarshalling de QDataStream allouent de la mémoire sur la base des informations trouvées dans le flux. Ces opérateurs ne vérifient pas si la quantité de mémoire demandée est raisonnable ou si elle est compatible avec la quantité de données disponibles dans le flux (exemple : le démarshalling d'un QByteArray ou d'un QString peut voir la demande d'allocation de plusieurs gigaoctets de données).
QDataStream ne doit pas être utilisé pour du contenu dont la provenance n'est pas fiable. Les applications doivent être conçues pour tenter de décoder uniquement les flux dont la provenance est au moins aussi fiable que celle de l'application elle-même ou de ses modules d'extension.
Voir également QTextStream et QVariant.
Documentation sur les types de membres
enum QDataStream::ByteOrder
L'ordre des octets utilisé pour la lecture/écriture des données.
| Constante | Valeur | Description de l'ordre des octets |
|---|---|---|
QDataStream::BigEndian | QSysInfo::BigEndian | Octet le plus significatif en premier (par défaut) |
QDataStream::LittleEndian | QSysInfo::LittleEndian | Octet le moins significatif en premier |
enum QDataStream::FloatingPointPrecision
La précision des nombres à virgule flottante utilisés pour lire/écrire les données. Cela n'aura d'effet que si la version du flux de données est Qt_4_6 ou supérieure.
Attention : La précision des nombres à virgule flottante doit être définie à la même valeur sur l'objet qui écrit et sur l'objet qui lit le flux de données.
| Constante | Valeur | Description |
|---|---|---|
QDataStream::SinglePrecision | 0 | Tous les nombres à virgule flottante du flux de données ont une précision de 32 bits. |
QDataStream::DoublePrecision | 1 | Tous les nombres à virgule flottante du flux de données ont une précision de 64 bits. |
Voir également setFloatingPointPrecision() et floatingPointPrecision().
enum QDataStream::Status
Cette énumération décrit l'état actuel du flux de données.
| Constante | Valeur | Description du flux de données |
|---|---|---|
QDataStream::Ok | 0 | Le flux de données fonctionne normalement. |
QDataStream::ReadPastEnd | 1 | Le flux de données a dépassé la fin des données dans le périphérique sous-jacent. |
QDataStream::ReadCorruptData | 2 | Le flux de données a lu des données corrompues. |
QDataStream::WriteFailed | 3 | Le flux de données ne peut pas écrire sur le périphérique sous-jacent. |
QDataStream::SizeLimitExceeded (since Qt 6.7) | 4 | Le flux de données ne peut pas lire ou écrire les données parce que leur taille est supérieure à celle prise en charge par la plate-forme actuelle. Cela peut se produire, par exemple, lorsque l'on essaie de lire plus de 2 GiB de données sur une plate-forme 32 bits. |
enum QDataStream::Version
Cette énumération fournit des synonymes symboliques pour les numéros de version du format de sérialisation des données.
| Constante | Valeur |
|---|---|
QDataStream::Qt_1_0 | 1 |
QDataStream::Qt_2_0 | 2 |
QDataStream::Qt_2_1 | 3 |
QDataStream::Qt_3_0 | 4 |
QDataStream::Qt_3_1 | 5 |
QDataStream::Qt_3_3 | 6 |
QDataStream::Qt_4_0 | 7 |
QDataStream::Qt_4_1 | Qt_4_0 |
QDataStream::Qt_4_2 | 8 |
QDataStream::Qt_4_3 | 9 |
QDataStream::Qt_4_4 | 10 |
QDataStream::Qt_4_5 | 11 |
QDataStream::Qt_4_6 | 12 |
QDataStream::Qt_4_7 | Qt_4_6 |
QDataStream::Qt_4_8 | Qt_4_7 |
QDataStream::Qt_4_9 | Qt_4_8 |
QDataStream::Qt_5_0 | 13 |
QDataStream::Qt_5_1 | 14 |
QDataStream::Qt_5_2 | 15 |
QDataStream::Qt_5_3 | Qt_5_2 |
QDataStream::Qt_5_4 | 16 |
QDataStream::Qt_5_5 | Qt_5_4 |
QDataStream::Qt_5_6 | 17 |
QDataStream::Qt_5_7 | Qt_5_6 |
QDataStream::Qt_5_8 | Qt_5_7 |
QDataStream::Qt_5_9 | Qt_5_8 |
QDataStream::Qt_5_10 | Qt_5_9 |
QDataStream::Qt_5_11 | Qt_5_10 |
QDataStream::Qt_5_12 | 18 |
QDataStream::Qt_5_13 | 19 |
QDataStream::Qt_5_14 | Qt_5_13 |
QDataStream::Qt_5_15 | Qt_5_14 |
QDataStream::Qt_6_0 | 20 |
QDataStream::Qt_6_1 | Qt_6_0 |
QDataStream::Qt_6_2 | Qt_6_0 |
QDataStream::Qt_6_3 | Qt_6_0 |
QDataStream::Qt_6_4 | Qt_6_0 |
QDataStream::Qt_6_5 | Qt_6_0 |
QDataStream::Qt_6_6 | 21 |
QDataStream::Qt_6_7 | 22 |
QDataStream::Qt_6_8 | Qt_6_7 |
QDataStream::Qt_6_9 | Qt_6_7 |
QDataStream::Qt_6_10 | 23 |
QDataStream::Qt_6_11 | 24 |
Voir aussi setVersion() et version().
Documentation des fonctions membres
QDataStream::QDataStream()
Construit un flux de données qui n'a pas de périphérique d'entrée/sortie.
Voir aussi setDevice().
[explicit] QDataStream::QDataStream(QIODevice *d)
Construit un flux de données qui utilise le périphérique d'E/S d.
Voir également setDevice() et device().
QDataStream::QDataStream(const QByteArray &a)
Construit un flux de données en lecture seule qui opère sur un tableau d'octets a. Utilisez QDataStream(QByteArray*, int) si vous souhaitez écrire dans un tableau d'octets.
Comme QByteArray n'est pas une sous-classe de QIODevice, une QBuffer est créée en interne pour envelopper le tableau d'octets.
QDataStream::QDataStream(QByteArray *a, QIODeviceBase::OpenMode mode)
Construit un flux de données qui opère sur un tableau d'octets, a. Le site mode décrit la manière dont le périphérique doit être utilisé.
Vous pouvez également utiliser QDataStream(const QByteArray &) si vous souhaitez simplement lire un tableau d'octets.
Comme QByteArray n'est pas une sous-classe de QIODevice, une QBuffer est créée en interne pour envelopper le tableau d'octets.
[noexcept] QDataStream::~QDataStream()
Détruit le flux de données.
Le destructeur n'affecte pas le périphérique d'E/S actuel, sauf s'il s'agit d'un périphérique d'E/S interne (par exemple, un QBuffer) traitant un QByteArray transmis dans le constructeur, auquel cas le périphérique d'E/S interne est détruit.
void QDataStream::abortTransaction()
Abandonne une transaction de lecture.
Cette fonction est généralement utilisée pour abandonner la transaction après des erreurs de protocole de niveau supérieur ou une perte de synchronisation des flux.
Si elle est appelée sur une transaction interne, l'abandon est délégué à la transaction la plus externe, et les transactions internes démarrées ultérieurement sont forcées d'échouer.
Pour la transaction externe, le point de restauration et toutes les données dupliquées en interne dans le flux sont supprimés. N'affecte pas la position de lecture actuelle du flux.
Définit l'état du flux de données à
| Constante | Description |
|---|---|
ReadCorruptData | . |
Voir également startTransaction(), commitTransaction() et rollbackTransaction().
bool QDataStream::atEnd() const
Renvoie true si le périphérique d'E/S a atteint la position de fin (fin du flux ou du fichier) ou si aucun périphérique d'E/S n'est défini ; sinon, renvoie false.
Voir aussi QIODevice::atEnd().
QDataStream::ByteOrder QDataStream::byteOrder() const
Renvoie l'ordre actuel des octets - soit BigEndian ou LittleEndian.
Voir aussi setByteOrder().
bool QDataStream::commitTransaction()
Termine une transaction de lecture. Retourne true si aucune erreur de lecture ne s'est produite pendant la transaction ; sinon, retourne false.
Si elle est appelée sur une transaction interne, la validation sera reportée jusqu'à ce que l'appel commitTransaction(), rollbackTransaction() ou abortTransaction() le plus éloigné se produise.
Dans le cas contraire, si l'état du flux indique que la lecture a dépassé la fin des données, cette fonction restaure les données du flux au moment de l'appel à startTransaction(). Dans ce cas, vous devez attendre que d'autres données arrivent, après quoi vous commencez une nouvelle transaction. Si le flux de données a lu des données corrompues ou si l'une des transactions internes a été interrompue, cette fonction interrompt la transaction.
Voir également startTransaction(), rollbackTransaction() et abortTransaction().
QIODevice *QDataStream::device() const
Renvoie le périphérique d'E/S actuellement défini, ou nullptr si aucun périphérique n'est actuellement défini.
Voir aussi setDevice().
QDataStream::FloatingPointPrecision QDataStream::floatingPointPrecision() const
Renvoie la précision en virgule flottante du flux de données.
Voir aussi FloatingPointPrecision et setFloatingPointPrecision().
[since 6.7] QDataStream &QDataStream::readBytes(char *&s, qint64 &l)
Lit le tampon s dans le flux et renvoie une référence au flux.
Le tampon s est alloué à l'aide de new []. Il peut être détruit à l'aide de l'opérateur delete [].
Le paramètre l correspond à la longueur du tampon. Si la chaîne lue est vide, l est mis à 0 et s est mis à nullptr.
Le format de sérialisation est un spécificateur de longueur d'abord, puis l octets de données. Le spécificateur de longueur est un quint32 si la version est inférieure à 6.7 ou si le nombre d'éléments est inférieur à 0xfffffe (2^32 -2), sinon il y a une valeur d'extension 0xfffffe suivie d'un quint64 avec la valeur réelle. De plus, pour les conteneurs qui supportent isNull(), il est encodé comme un simple quint32 avec tous les bits définis et aucune donnée.
Cette fonction a été introduite dans Qt 6.7.
Voir aussi readRawData() et writeBytes().
qint64 QDataStream::readRawData(char *s, qint64 len)
Lit au maximum len octets du flux dans s et renvoie le nombre d'octets lus. En cas d'erreur, cette fonction renvoie -1.
Le tampon s doit être pré-alloué. Les données ne sont pas décodées.
Voir aussi readBytes(), QIODevice::read() et writeRawData().
void QDataStream::resetStatus()
Réinitialise l'état du flux de données.
Voir aussi Status, status(), et setStatus().
void QDataStream::rollbackTransaction()
Annule une transaction de lecture.
Cette fonction est généralement utilisée pour annuler la transaction lorsqu'une lecture incomplète a été détectée avant la validation de la transaction.
Si elle est appelée sur une transaction interne, l'annulation est déléguée à la transaction externe, et les transactions internes démarrées ultérieurement sont forcées d'échouer.
Pour la transaction externe, rétablit les données du flux au point de l'appel à startTransaction(). Si le flux de données a lu des données corrompues ou si l'une des transactions internes a été interrompue, cette fonction interrompt la transaction.
Si les opérations précédentes sur le flux ont réussi, cette fonction définit l'état du flux de données à
| Constante | Description |
|---|---|
ReadPastEnd | . |
Voir également startTransaction(), commitTransaction() et abortTransaction().
void QDataStream::setByteOrder(QDataStream::ByteOrder bo)
Définit l'ordre des octets de la sérialisation à bo.
Le paramètre bo peut être QDataStream::BigEndian ou QDataStream::LittleEndian.
Le paramètre par défaut est big-endian. Nous recommandons de laisser ce paramètre à moins que vous n'ayez des exigences particulières.
Voir aussi byteOrder().
void QDataStream::setDevice(QIODevice *d)
void QDataStream::setDevice(QIODevice *d)
Définit le périphérique d'E/S à d, qui peut être nullptr pour annuler le périphérique d'E/S actuel.
Voir également device().
void QDataStream::setFloatingPointPrecision(QDataStream::FloatingPointPrecision precision)
Définit la précision de la virgule flottante du flux de données à precision. Si la précision de la virgule flottante est DoublePrecision et que la version du flux de données est Qt_4_6 ou supérieure, tous les nombres à virgule flottante seront écrits et lus avec une précision de 64 bits. Si la précision de la virgule flottante est SinglePrecision et que la version est Qt_4_6 ou supérieure, tous les nombres à virgule flottante seront écrits et lus avec une précision de 32 bits.
Pour les versions antérieures à Qt_4_6, la précision des nombres à virgule flottante dans le flux de données dépend de l'opérateur de flux appelé.
La valeur par défaut est DoublePrecision.
Notez que cette propriété n'affecte pas la sérialisation ou la désérialisation des instances qfloat16.
Attention : Cette propriété doit avoir la même valeur sur l'objet qui écrit et sur l'objet qui lit le flux de données.
Voir aussi floatingPointPrecision().
void QDataStream::setStatus(QDataStream::Status status)
Fixe l'état du flux de données à l'adresse status.
Les appels ultérieurs à setStatus() sont ignorés jusqu'à ce que resetStatus() soit appelé.
Voir aussi Status, status(), et resetStatus().
void QDataStream::setVersion(int v)
Définit le numéro de version du format de sérialisation des données à v, une valeur de l'énumération Version.
Vous n'avez pas besoin de définir une version si vous utilisez la version actuelle de Qt, mais pour vos propres formats binaires personnalisés, nous vous recommandons de le faire ; voir Versioning dans la description détaillée.
Pour s'adapter aux nouvelles fonctionnalités, le format de sérialisation des flux de données de certaines classes Qt a changé dans certaines versions de Qt. Si vous souhaitez lire des données créées par une version antérieure de Qt, ou écrire des données qui peuvent être lues par un programme compilé avec une version antérieure de Qt, utilisez cette fonction pour modifier le format de sérialisation utilisé par QDataStream.
L'énumération Version fournit des constantes symboliques pour les différentes versions de Qt. Par exemple :
QDataStream out(&file); out.setVersion(QDataStream::Qt_4_0);
Voir aussi version() et Version.
qint64 QDataStream::skipRawData(qint64 len)
Sauter len octets de l'appareil. Renvoie le nombre d'octets effectivement ignorés, ou -1 en cas d'erreur.
Cela équivaut à appeler readRawData() sur un tampon de longueur len et à ignorer le tampon.
Voir aussi QIODevice::seek().
void QDataStream::startTransaction()
Démarre une nouvelle transaction de lecture sur le flux.
Définit un point de restauration dans la séquence des opérations de lecture. Pour les périphériques séquentiels, les données lues seront dupliquées en interne pour permettre la récupération en cas de lecture incomplète. Pour les périphériques à accès aléatoire, cette fonction enregistre la position actuelle du flux. Appelez commitTransaction(), rollbackTransaction() ou abortTransaction() pour terminer la transaction en cours.
Une fois qu'une transaction est lancée, les appels ultérieurs à cette fonction rendront la transaction récursive. Les transactions internes agissent en tant qu'agents de la transaction externe (c'est-à-dire qu'elles signalent l'état des opérations de lecture à la transaction externe, qui peut rétablir la position du flux).
Remarque : la restauration au point de l'appel imbriqué startTransaction() n'est pas prise en charge.
Lorsqu'une erreur survient au cours d'une transaction (y compris l'échec d'une transaction interne), la lecture du flux de données est suspendue (toutes les opérations de lecture suivantes renvoient des valeurs vides ou nulles) et les transactions internes suivantes sont forcées d'échouer. Le démarrage d'une nouvelle transaction externe permet de sortir de cet état. Ce comportement rend inutile le contrôle d'erreur de chaque opération de lecture séparément.
Voir aussi commitTransaction(), rollbackTransaction() et abortTransaction().
QDataStream::Status QDataStream::status() const
Renvoie l'état du flux de données.
Voir aussi Status, setStatus(), et resetStatus().
int QDataStream::version() const
Renvoie le numéro de version du format de sérialisation des données.
Voir aussi setVersion() et Version.
QDataStream &QDataStream::writeBytes(const char *s, qint64 len)
Écrit le spécificateur de longueur len et le tampon s dans le flux et renvoie une référence au flux.
len est sérialisé sous la forme d'un quint32 et d'un quint64 optionnel, suivi de len octets provenant de s. Notez que les données ne sont pas encodées.
Voir aussi writeRawData() et readBytes().
qint64 QDataStream::writeRawData(const char *s, qint64 len)
Écrit len octets de s dans le flux. Renvoie le nombre d'octets effectivement écrits, ou -1 en cas d'erreur. Les données ne sont pas encodées.
Voir aussi writeBytes(), QIODevice::write(), et readRawData().
[explicit noexcept, since 6.10] QDataStream::operator bool() const
Retourne si ce flux n'a pas d'erreurs (status() retourne Ok).
Cette fonction a été introduite dans Qt 6.10.
QDataStream &QDataStream::operator<<(qint8 i)
Écrit un octet signé, i, dans le flux et renvoie une référence au flux.
QDataStream &QDataStream::operator<<(bool i)
Écrit une valeur booléenne, i, dans le flux. Renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
[since 6.0] QDataStream &QDataStream::operator<<(char16_t c)
Écrit un caractère, c, dans le flux. Renvoie une référence au flux
Il s'agit d'une fonction surchargée.
Cette fonction a été introduite dans Qt 6.0.
[since 6.0] QDataStream &QDataStream::operator<<(char32_t c)
Écrit un caractère, c, dans le flux. Renvoie une référence au flux
Il s'agit d'une fonction surchargée.
Cette fonction a été introduite dans Qt 6.0.
QDataStream &QDataStream::operator<<(const char *s)
Écrit la chaîne '\0'-terminée s dans le flux et renvoie une référence au flux.
La chaîne est sérialisée à l'aide de writeBytes().
Il s'agit d'une fonction surchargée.
Voir aussi writeBytes() et writeRawData().
QDataStream &QDataStream::operator<<(double f)
Écrit un nombre à virgule flottante, f, dans le flux en utilisant le format standard IEEE 754. Renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
Voir également setFloatingPointPrecision().
QDataStream &QDataStream::operator<<(float f)
Écrit un nombre à virgule flottante, f, dans le flux en utilisant le format standard IEEE 754. Renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
Voir également setFloatingPointPrecision().
QDataStream &QDataStream::operator<<(qint16 i)
Écrit un entier signé de 16 bits, i, dans le flux et renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
QDataStream &QDataStream::operator<<(qint32 i)
Écrit un entier signé de 32 bits, i, dans le flux et renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
QDataStream &QDataStream::operator<<(qint64 i)
Écrit un entier signé de 64 bits, i, dans le flux et renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
QDataStream &QDataStream::operator<<(quint16 i)
Écrit un entier non signé de 16 bits, i, dans le flux et renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
QDataStream &QDataStream::operator<<(quint32 i)
Écrit un entier non signé, i, dans le flux sous la forme d'un entier non signé de 32 bits (quint32). Renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
QDataStream &QDataStream::operator<<(quint64 i)
Écrit un entier non signé de 64 bits, i, dans le flux et renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
QDataStream &QDataStream::operator<<(quint8 i)
Écrit un octet non signé, i, dans le flux et renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
QDataStream &QDataStream::operator<<(std::nullptr_t ptr)
Simule l'écriture d'un std::nullptr_t, ptr, dans le flux et renvoie une référence au flux. Cette fonction n'écrit en réalité rien dans le flux, car les valeurs std::nullptr_t sont stockées sous la forme de 0 octet.
Il s'agit d'une fonction surchargée.
QDataStream &QDataStream::operator>>(bool &i)
Lit une valeur booléenne du flux dans i. Renvoie une référence au flux.
QDataStream &QDataStream::operator>>(qint8 &i)
Lit un octet signé du flux dans i, et renvoie une référence au flux.
QDataStream &QDataStream::operator>>(char *&s)
Lit la chaîne s à partir du flux et renvoie une référence au flux.
La chaîne est désérialisée à l'aide de readBytes() où le format de sérialisation est un spécificateur de longueur quint32 en premier, suivi du nombre d'octets de données. La chaîne résultante est toujours '\0'-terminée.
L'espace pour la chaîne est alloué à l'aide de new [] - l'appelant doit le détruire à l'aide de delete [].
Il s'agit d'une fonction surchargée.
Voir aussi readBytes() et readRawData().
[since 6.0] QDataStream &QDataStream::operator>>(char16_t &c)
Lit un caractère de 16 bits de large du flux dans c et renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
Cette fonction a été introduite dans Qt 6.0.
[since 6.0] QDataStream &QDataStream::operator>>(char32_t &c)
Lit un caractère de 32 bits de large du flux dans c et renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
Cette fonction a été introduite dans Qt 6.0.
QDataStream &QDataStream::operator>>(double &f)
Lit un nombre à virgule flottante du flux dans f, en utilisant le format standard IEEE 754. Renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
Voir également setFloatingPointPrecision().
QDataStream &QDataStream::operator>>(float &f)
Lit un nombre à virgule flottante du flux dans f, en utilisant le format standard IEEE 754. Renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
Voir également setFloatingPointPrecision().
QDataStream &QDataStream::operator>>(qint16 &i)
Lit un entier signé de 16 bits du flux dans i, et renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
QDataStream &QDataStream::operator>>(qint32 &i)
Lit un entier signé de 32 bits du flux dans i, et renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
QDataStream &QDataStream::operator>>(qint64 &i)
Lit un entier signé de 64 bits du flux dans i, et renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
QDataStream &QDataStream::operator>>(quint16 &i)
Lit un entier 16 bits non signé du flux dans i, et renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
QDataStream &QDataStream::operator>>(quint32 &i)
Lit un entier 32 bits non signé du flux dans i, et renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
QDataStream &QDataStream::operator>>(quint64 &i)
Lit un entier 64 bits non signé dans le flux, dans i, et renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
QDataStream &QDataStream::operator>>(quint8 &i)
Lit un octet non signé du flux dans i, et renvoie une référence au flux.
Il s'agit d'une fonction surchargée.
QDataStream &QDataStream::operator>>(std::nullptr_t &ptr)
Simule la lecture d'une valeur std::nullptr_t du flux dans ptr et renvoie une référence au flux. Cette fonction ne lit en réalité rien dans le flux, car les valeurs std::nullptr_t sont stockées sous la forme de 0 octet.
Il s'agit d'une fonction surchargée.
Non-membres apparentés
[since 6.0] template <typename T1, typename T2> QDataStream &operator<<(QDataStream &out, const std::pair<T1, T2> &pair)
Écrit la paire pair dans le flux out.
Cette fonction nécessite les types T1 et T2 pour implémenter operator<<().
Cette fonction a été introduite dans Qt 6.0.
Voir aussi Serializing Qt Data Types (Sérialisation des types de données Qt).
[since 6.0] template <typename T1, typename T2> QDataStream &operator>>(QDataStream &in, std::pair<T1, T2> &pair)
Lit une paire du flux in dans pair.
Cette fonction nécessite les types T1 et T2 pour implémenter operator>>().
Cette fonction a été introduite dans Qt 6.0.
Voir aussi Serializing Qt Data Types (Sérialisation des types de données Qt).
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.