Sur cette page

QBuffer Class

La classe QBuffer fournit une interface de type « QIODevice » pour un « QByteArray ». En savoir plus...

En-tête : #include <QBuffer>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Hérite de : QIODevice

Remarque : toutes les fonctions de cette classe sont réentrantes.

Fonctions publiques

QBuffer(QObject *parent = nullptr)
QBuffer(QByteArray *byteArray, QObject *parent = nullptr)
virtual ~QBuffer()
QByteArray &buffer()
const QByteArray &buffer() const
const QByteArray &data() const
void setBuffer(QByteArray *byteArray)
void setData(const QByteArray &data)
void setData(const char *data, qsizetype size)

Fonctions publiques réimplémentées

virtual bool atEnd() const override
virtual bool canReadLine() const override
virtual void close() override
virtual bool open(QIODeviceBase::OpenMode mode) override
virtual qint64 pos() const override
virtual bool seek(qint64 pos) override
virtual qint64 size() const override

Fonctions protégées réimplémentées

virtual qint64 readData(char *data, qint64 len) override
virtual qint64 writeData(const char *data, qint64 len) override

Description détaillée

QBuffer vous permet d’accéder à un fichier « QByteArray » à l’aide de l’interface QIODevice. Le fichier « QByteArray » est traité comme un fichier standard à accès aléatoire. Exemple :

    QBuffer buffer;
    char ch;

    buffer.open(QBuffer::ReadWrite);
    buffer.write("Qt rocks!");
    buffer.seek(0);
    buffer.getChar(&ch);  // ch == 'Q'
    buffer.getChar(&ch);  // ch == 't'
    buffer.getChar(&ch);  // ch == ' '
    buffer.getChar(&ch);  // ch == 'r'

Par défaut, un tampon d'QByteArray interne est créé automatiquement lorsque vous instanciez un objet QBuffer. Vous pouvez accéder directement à ce tampon en appelant la fonction buffer(). Vous pouvez également utiliser QBuffer avec un QByteArray existant en appelant la fonction setBuffer(), ou en passant votre tableau au constructeur de QBuffer.

Appelez open() pour ouvrir le tampon. Appelez ensuite write() ou putChar() pour écrire dans le tampon, et read(), readLine(), readAll() ou getChar() pour y lire des données. size() renvoie la taille actuelle du tampon, et vous pouvez vous positionner à des emplacements arbitraires dans le tampon en appelant seek(). Lorsque vous avez terminé d’accéder au tampon, appelez close().

L'extrait de code suivant montre comment écrire des données dans un fichier « QByteArray » à l'aide de ` QDataStream ` et de `QBuffer` :

    QByteArray byteArray;
    QBuffer buffer(&byteArray);
    buffer.open(QIODevice::WriteOnly);

    QDataStream out(&buffer);
    out << palette;

Concrètement, nous convertissons l’ QPalette de l’application en un tableau d’octets. Voici comment lire les données à partir de l’ QByteArray:

    QPalette palette;
    QBuffer buffer(&byteArray);
    buffer.open(QIODevice::ReadOnly);

    QDataStream in(&buffer);
    in >> palette;

QTextStream QDataStream fournit également des constructeurs pratiques qui prennent un en paramètre et créent un QBuffer en arrière-plan. QByteArray

QBuffer émet le signal ` readyRead()` lorsque de nouvelles données arrivent dans le tampon. En vous connectant à ce signal, vous pouvez utiliser QBuffer pour stocker des données temporaires avant de les traiter. QBuffer émet également le signal ` bytesWritten()` chaque fois que de nouvelles données ont été écrites dans le tampon.

Voir également QFile, QDataStream, QTextStream et QByteArray.

Documentation sur les fonctions membres

[explicit] QBuffer::QBuffer(QObject *parent = nullptr)

Crée un tampon vide à partir de l'parent fournie. Vous pouvez appeler la fonction setData() pour remplir le tampon avec des données, ou l'ouvrir en mode écriture et utiliser la fonction write().

Voir également open().

QBuffer::QBuffer(QByteArray *byteArray, QObject *parent = nullptr)

Construit un QBuffer qui utilise l’ QByteArray pointé par byteArray comme tampon interne, et avec l’ parent donné. L’appelant est chargé de s’assurer que byteArray reste valide jusqu’à la destruction du QBuffer, ou jusqu’à ce que setBuffer() soit appelé pour changer de tampon. QBuffer ne prend pas possession de l’ QByteArray.

Si vous ouvrez le tampon en mode écriture seule ou en mode lecture-écriture et que vous écrivez des données dans le QBuffer, le fichier byteArray sera modifié.

Exemple :

    QByteArray byteArray("abc");
    QBuffer buffer(&byteArray);
    buffer.open(QIODevice::WriteOnly);
    buffer.seek(3);
    buffer.write("def", 3);
    buffer.close();
    // byteArray == "abcdef"

Voir également open(), setBuffer() et setData().

[virtual noexcept] QBuffer::~QBuffer()

Supprime le tampon.

[override virtual] bool QBuffer::atEnd() const

Réimplémente : QIODevice::atEnd() const.

QByteArray &QBuffer::buffer()

Renvoie une référence au tampon interne de l'QBuffer. Vous pouvez l'utiliser pour modifier l'QByteArray à l'insu de l'QBuffer.

Voir également setBuffer() et data().

const QByteArray &QBuffer::buffer() const

Cela revient à utiliser ` data()`.

Il s'agit d'une fonction surchargée.

[override virtual] bool QBuffer::canReadLine() const

Réimplémente : QIODevice::canReadLine() const.

[override virtual] void QBuffer::close()

Réimplémente : QIODevice::close().

const QByteArray &QBuffer::data() const

Renvoie les données contenues dans le tampon.

Cette fonction est identique à buffer().

Voir également setData() et setBuffer().

[override virtual] bool QBuffer::open(QIODeviceBase::OpenMode mode)

Réimplémente : QIODevice::open(mode QIODeviceBase::OpenMode).

Ouvre le tampon en utilisant les indicateurs de ` mode ` et renvoie ` true ` en cas de succès ; sinon, renvoie ` false`.

Les indicateurs pour mode doivent inclure QIODeviceBase::ReadOnly, WriteOnly ou ReadWrite. Si ce n’est pas le cas, une erreur est affichée et la méthode échoue. Dans tous les autres cas, elle aboutit.

Contrairement à ` QFile::open()`, l'ouverture d'un ` QBuffer ` avec ` WriteOnly ` ne le tronque pas. Cependant, ` pos()` est défini sur ` 0`. Utilisez ` Append ` ou ` Truncate ` pour modifier l'un ou l'autre de ces comportements.

[override virtual] qint64 QBuffer::pos() const

Réimplémente : QIODevice::pos() const.

[override virtual protected] qint64 QBuffer::readData(char *data, qint64 len)

Réimplémentation de : QIODevice::readData(char *data, qint64 maxSize).

[override virtual] bool QBuffer::seek(qint64 pos)

Réimplémente : QIODevice::seek(qint64 pos).

void QBuffer::setBuffer(QByteArray *byteArray)

Permet à la fonction QBuffer d'utiliser l'QByteArray pointé par byteArray comme tampon interne. L'appelant doit s'assurer que byteArray reste valide jusqu'à la destruction de QBuffer, ou jusqu'à ce que la fonction setBuffer() soit appelée pour changer de tampon. La fonction QBuffer ne prend pas possession de QByteArray.

Ne fait rien si isOpen() est vrai.

Si vous ouvrez le tampon en mode écriture seule ou en mode lecture-écriture et que vous écrivez quelque chose dans l’ QBuffer, byteArray sera modifié.

Exemple :

    QByteArray byteArray("abc");
    QBuffer buffer;
    buffer.setBuffer(&byteArray);
    buffer.open(QIODevice::WriteOnly);
    buffer.seek(3);
    buffer.write("def", 3);
    buffer.close();
    // byteArray == "abcdef"

Si byteArray est nullptr, le tampon crée son propre tableau d’octets interne ( QByteArray ) sur lequel il va travailler. Ce tableau d’octets est initialement vide.

Voir également buffer(), setData() et open().

void QBuffer::setData(const QByteArray &data)

Définit le contenu du tampon interne à la valeur « data ». Cela revient à attribuer la valeur « data » à la fonction « buffer() ».

Ne fait rien si isOpen() est vrai.

Voir également data() et setBuffer().

void QBuffer::setData(const char *data, qsizetype size)

Définit le contenu du tampon interne sur les premiers size octets de data.

Remarque : dans les versions de Qt antérieures à la version 6.5, cette fonction prenait la longueur comme paramètre int, ce qui pouvait entraîner une troncature des tailles.

Il s'agit d'une fonction surchargée.

[override virtual] qint64 QBuffer::size() const

Réimplémente : QIODevice::size() const.

[override virtual protected] qint64 QBuffer::writeData(const char *data, qint64 len)

Réimplémentation de : QIODevice::writeData(const char *data, qint64 maxSize).

© 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.