QBuffer Class
Die Klasse „QBuffer“ stellt eine Schnittstelle vom Typ „ QIODevice “ für eine „ QByteArray “ bereit. Mehr...
| Header: | #include <QBuffer> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Erbt von: | QIODevice |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- QBuffer ist Teil von „Eingabe/Ausgabe und Netzwerk“.
Hinweis: Alle Funktionen dieser Klasse sind reentrant.
Öffentliche Funktionen
| 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) |
Neu implementierte öffentliche Funktionen
| 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 |
Neu implementierte geschützte Funktionen
| virtual qint64 | readData(char *data, qint64 len) override |
| virtual qint64 | writeData(const char *data, qint64 len) override |
Ausführliche Beschreibung
Mit „QBuffer“ können Sie über die Schnittstelle „ QIODevice “ auf einen „ QByteArray “ zugreifen. Die „ QByteArray “ wird wie eine normale Datei mit wahlfreiem Zugriff behandelt. Beispiel:
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'Standardmäßig wird beim Anlegen eines QBuffer ein interner „ QByteArray “-Puffer für Sie erstellt. Sie können direkt auf diesen Puffer zugreifen, indem Sie buffer() aufrufen. Sie können QBuffer auch mit einem bereits vorhandenen „ QByteArray “ verwenden, indem Sie setBuffer() aufrufen oder Ihr Array an den Konstruktor von QBuffer übergeben.
Rufen Sie ` open()` auf, um den Puffer zu öffnen. Rufen Sie anschließend ` write()` oder ` putChar()` auf, um in den Puffer zu schreiben, und ` read()`, ` readLine()`, ` readAll()` oder ` getChar()`, um aus ihm zu lesen. ` size()` gibt die aktuelle Größe des Puffers zurück, und Sie können durch Aufruf von ` seek()` zu beliebigen Positionen im Puffer springen. Wenn Sie den Zugriff auf den Puffer beendet haben, rufen Sie „ close()“ auf.
Der folgende Codeausschnitt zeigt, wie Daten mithilfe von ` QDataStream ` und `QBuffer` in eine ` QByteArray ` geschrieben werden:
QByteArray byteArray;
QBuffer buffer(&byteArray);
buffer.open(QIODevice::WriteOnly);
QDataStream out(&buffer);
out << palette;Im Grunde wandeln wir das „ QPalette “ der Anwendung in ein Byte-Array um. So lesen Sie die Daten aus dem „ QByteArray “ aus:
QPalette palette;
QBuffer buffer(&byteArray);
buffer.open(QIODevice::ReadOnly);
QDataStream in(&buffer);
in >> palette;QTextStream QDataStream bietet zudem praktische Konstruktoren, die einen „ “ entgegennehmen und im Hintergrund einen „QBuffer“ erstellen. QByteArray
QBuffer sendet das Signal „ readyRead()“, wenn neue Daten im Puffer eingetroffen sind. Durch das Anbinden an dieses Signal können Sie QBuffer nutzen, um temporäre Daten vor ihrer Verarbeitung zu speichern. QBuffer sendet außerdem jedes Mal das Signal „ bytesWritten()“, wenn neue Daten in den Puffer geschrieben wurden.
Siehe auch „ QFile“ , „ QDataStream “, „ QTextStream “ und „ QByteArray “.
Dokumentation zu den Member-Funktionen
[explicit] QBuffer::QBuffer(QObject *parent = nullptr)
Erstellt einen leeren Puffer mit dem angegebenen ` parent`. Sie können die Funktion ` setData()` aufrufen, um den Puffer mit Daten zu füllen, oder Sie können ihn im Schreibmodus öffnen und die Funktion ` write()` verwenden.
Siehe auch open().
QBuffer::QBuffer(QByteArray *byteArray, QObject *parent = nullptr)
Erstellt einen QBuffer, der den von byteArray angegebenen QByteArray als internen Puffer verwendet und die angegebene parent enthält. Der Aufrufer muss sicherstellen, dass byteArray gültig bleibt, bis der QBuffer zerstört wird oder bis setBuffer() aufgerufen wird, um den Puffer zu ändern. QBuffer übernimmt nicht die Eigentumsrechte an QByteArray.
Wenn Sie den Puffer im Schreibschutzmodus oder im Lese-Schreib-Modus öffnen und etwas in den QBuffer schreiben, wird „ byteArray “ geändert.
Beispiel:
QByteArray byteArray("abc");
QBuffer buffer(&byteArray);
buffer.open(QIODevice::WriteOnly);
buffer.seek(3);
buffer.write("def", 3);
buffer.close();
// byteArray == "abcdef"Siehe auch open(), setBuffer() und setData().
[virtual noexcept] QBuffer::~QBuffer()
Löscht den Puffer.
[override virtual] bool QBuffer::atEnd() const
Implementiert erneut: ` QIODevice::atEnd()` const.
QByteArray &QBuffer::buffer()
Gibt eine Referenz auf den internen Puffer des „ QBuffer “ zurück. Damit können Sie die „ QByteArray “ hinter dem Rücken des „ QBuffer “ ändern.
Siehe auch setBuffer() und data().
const QByteArray &QBuffer::buffer() const
Dies entspricht „ data()“.
Dies ist eine überladene Funktion.
[override virtual] bool QBuffer::canReadLine() const
Implementiert: ` QIODevice::canReadLine()` const.
[override virtual] void QBuffer::close()
Implementiert: QIODevice::close().
const QByteArray &QBuffer::data() const
Gibt die im Puffer enthaltenen Daten zurück.
Dies entspricht der Funktion „ buffer()“.
Siehe auch „ setData()“ und „ setBuffer()“.
[override virtual] bool QBuffer::open(QIODeviceBase::OpenMode mode)
Implementiert: QIODevice::open(QIODeviceBase::OpenMode-Modus).
Öffnet den Puffer unter Verwendung der Flags „ mode “ und gibt bei Erfolg „ true “ zurück; andernfalls wird „ false “ zurückgegeben.
Die Flags für „ mode “ müssen „ QIODeviceBase::ReadOnly “, „ WriteOnly “ oder „ ReadWrite “ enthalten. Ist dies nicht der Fall, wird eine Fehlermeldung ausgegeben und die Methode schlägt fehl. In allen anderen Fällen ist die Methode erfolgreich.
Im Gegensatz zu ` QFile::open()` wird ein ` QBuffer ` beim Öffnen mit ` WriteOnly ` nicht gekürzt. Allerdings wird ` pos()` auf ` 0` gesetzt. Verwenden Sie ` Append ` oder ` Truncate `, um eines der beiden Verhaltensweisen zu ändern.
[override virtual] qint64 QBuffer::pos() const
Implementiert: ` QIODevice::pos()` const.
[override virtual protected] qint64 QBuffer::readData(char *data, qint64 len)
Implementiert: QIODevice::readData(char *data, qint64 maxSize).
[override virtual] bool QBuffer::seek(qint64 pos)
Implementiert: QIODevice::seek(qint64 pos).
void QBuffer::setBuffer(QByteArray *byteArray)
Stellt sicher, dass „ QBuffer “ den unter „ byteArray “ angegebenen „ QByteArray “ als internen Puffer verwendet. Der Aufrufer muss sicherstellen, dass „ byteArray “ gültig bleibt, bis „ QBuffer “ zerstört wird oder bis „setBuffer()“ aufgerufen wird, um den Puffer zu ändern. „ QBuffer “ übernimmt keine Eigentumsrechte an „ QByteArray “.
Führt keine Aktion aus, wenn „ isOpen()“ wahr ist.
Wenn Sie den Puffer im Schreibschutzmodus oder im Lese-/Schreibmodus öffnen und etwas in den „ QBuffer “ schreiben, wird „ byteArray “ geändert.
Beispiel:
QByteArray byteArray("abc");
QBuffer buffer;
buffer.setBuffer(&byteArray);
buffer.open(QIODevice::WriteOnly);
buffer.seek(3);
buffer.write("def", 3);
buffer.close();
// byteArray == "abcdef"Wenn ` byteArray ` den Wert ` nullptr` hat, erstellt der Puffer sein eigenes internes ` QByteArray `, mit dem er arbeitet. Dieses Byte-Array ist anfangs leer.
Siehe auch buffer(), setData() und open().
void QBuffer::setData(const QByteArray &data)
Setzt den Inhalt des internen Puffers auf „ data “. Dies entspricht der Zuweisung von „ data “ an „ buffer()“.
Führt keine Aktion aus, wenn isOpen() wahr ist.
Siehe auch data() und setBuffer().
void QBuffer::setData(const char *data, qsizetype size)
Setzt den Inhalt des internen Puffers auf die ersten size Bytes von data.
Hinweis: In Qt-Versionen vor 6.5 nahm diese Funktion die Länge als Parameter „ int “ entgegen, wodurch Größen möglicherweise abgeschnitten wurden.
Dies ist eine überladene Funktion.
[override virtual] qint64 QBuffer::size() const
Implementiert erneut: ` QIODevice::size()` const.
[override virtual protected] qint64 QBuffer::writeData(const char *data, qint64 len)
Implementiert: ` 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.