Класс QBuffer
Класс QBuffer предоставляет интерфейс QIODevice для QByteArray. Подробнее...
| Заголовок: | #include <QBuffer> |
| CMake: | find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Наследуется от: | QIODevice |
Примечание: Все функции в этом классе являются реентерабельными.
Открытые функции
| QBuffer(QByteArray *byteArray, QObject *parent = nullptr) | |
| QBuffer(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, int size) |
Переопределённые открытые функции
| virtual bool | atEnd() const override |
| virtual bool | canReadLine() const override |
| virtual void | close() override |
| virtual bool | open(QIODeviceBase::OpenMode flags) override |
| virtual qint64 | pos() const override |
| virtual bool | seek(qint64 pos) override |
| virtual qint64 | size() const override |
Переопределённые защищённые функции
| virtual qint64 | readData(char *data, qint64 len) override |
| virtual qint64 | writeData(const char *data, qint64 len) override |
Подробное описание
QBuffer позволяет получить доступ к QByteArray с использованием интерфейса QIODevice. QByteArray обрабатывается как обычный файл с произвольным доступом. Пример:
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' По умолчанию, внутренний буфер QByteArray создаётся для вас при создании QBuffer. Вы можете получить доступ к этому буферу напрямую, вызвав buffer(). Также вы можете использовать QBuffer с существующим QByteArray, вызвав setBuffer(), или передав массив в конструктор QBuffer.
Вызовите open() для открытия буфера. Затем вызовите write() или putChar() для записи в буфер, и read(), readLine(), readAll(), или getChar() для чтения из него. size() возвращает текущий размер буфера, и вы можете перейти к произвольным позициям в буфере, вызвав seek(). Когда вы закончите работу с буфером, вызовите close().
Следующий фрагмент кода показывает, как записать данные в QByteArray с помощью QDataStream и QBuffer:
QByteArray byteArray;
QBuffer buffer(&byteArray);
buffer.open(QIODevice::WriteOnly);
QDataStream out(&buffer);
out << QApplication::palette(); По сути, мы конвертируем QPalette приложения в массив байтов. Вот как прочитать данные из QByteArray:
QPalette palette;
QBuffer buffer(&byteArray);
buffer.open(QIODevice::ReadOnly);
QDataStream in(&buffer);
in >> palette; QTextStream и QDataStream также предоставляют удобные конструкторы, которые принимают QByteArray и создают QBuffer за кулисами.
QBuffer испускает readyRead() при поступлении новых данных в буфер. Подключив к этому сигналу, вы можете использовать QBuffer для хранения временных данных перед их обработкой. QBuffer также испускает bytesWritten() каждый раз, когда новые данные были записаны в буфер.
См. также QFile, QDataStream, QTextStream и QByteArray.
Документация по членам функции
QBuffer::QBuffer(QByteArray *byteArray, QObject *parent = nullptr)
Конструирует QBuffer, который использует QByteArray, указанный по ссылке byteArray, как свой внутренний буфер, и с данным parent. Вызывающая сторона отвечает за обеспечение того, что byteArray остаётся допустимым до уничтожения QBuffer или до вызова setBuffer() для изменения буфера. QBuffer не принимает владения QByteArray.
Если вы открываете буфер в режиме только записи или чтения-записи и что-то записываете в QBuffer, byteArray будет изменён.
Пример:
QByteArray byteArray("abc");
QBuffer buffer(&byteArray);
buffer.open(QIODevice::WriteOnly);
buffer.seek(3);
buffer.write("def", 3);
buffer.close();
// byteArray == "abcdef" См. также open(), setBuffer() и setData().
QBuffer::QBuffer(QObject *parent = nullptr)
Конструирует пустой буфер с указанным parent. Вы можете вызвать setData() для заполнения буфера данными или открыть его в режиме записи и использовать write().
См. также open().
[virtual] QBuffer::~QBuffer()
Уничтожает буфер.
[override virtual] bool QBuffer::atEnd() const
Переопределяет: QIODevice::atEnd() const.
QByteArray &QBuffer::buffer()
Возвращает ссылку на внутренний буфер QBuffer. Вы можете использовать его для изменения QByteArray за спиной QBuffer.
См. также setBuffer() и data().
const QByteArray &QBuffer::buffer() const
Это перегруженная функция.
Это то же самое, что и data().
[override virtual] bool QBuffer::canReadLine() const
Переопределяет: QIODevice::canReadLine() const.
[override virtual] void QBuffer::close()
Переопределяет: QIODevice::close().
const QByteArray &QBuffer::data() const
Возвращает данные, содержащиеся в буфере.
Это то же самое, что и buffer().
См. также setData() и setBuffer().
[override virtual] bool QBuffer::open(QIODeviceBase::OpenMode flags)
Переопределяет: QIODevice::open(QIODeviceBase::OpenMode mode).
[override virtual] qint64 QBuffer::pos() const
Переопределяет: QIODevice::pos() const.
[override virtual protected] qint64 QBuffer::readData(char *data, qint64 len)
Переопределяет: QIODevice::readData(char *data, qint64 maxSize).
[override virtual] bool QBuffer::seek(qint64 pos)
Переопределяет: QIODevice::seek(qint64 pos).
END_OF_DOCUMENT_MARKERvoid QBuffer::setBuffer(QByteArray *byteArray)
Заставляет QBuffer использовать QByteArray, на который указывает byteArray, в качестве внутреннего буфера. Вызывающий код отвечает за обеспечение того, чтобы byteArray оставался допустимым до тех пор, пока QBuffer не будет уничтожен или пока для изменения буфера не будет вызван метод setBuffer(). QBuffer не берет на себя ответственность за QByteArray.
Не выполняет никаких действий, если isOpen() имеет значение true.
Если вы откроете буфер в режиме записи или в режиме чтения-записи и запишите что-то в QBuffer, byteArray будет изменён.
Пример:
QByteArray byteArray("abc");
QBuffer buffer;
buffer.setBuffer(&byteArray);
buffer.open(QIODevice::WriteOnly);
buffer.seek(3);
buffer.write("def", 3);
buffer.close();
// byteArray == "abcdef" Если byteArray равен nullptr, буфер создаст собственный внутренний QByteArray для работы. Этот массив байтов изначально пуст.
См. также buffer(), setData() и open().
void QBuffer::setData(const QByteArray &data)
Устанавливает содержимое внутреннего буфера в data. Это эквивалентно присвоению data свойству buffer().
Не выполняет никаких действий, если isOpen() имеет значение true.
См. также data() и setBuffer().
void QBuffer::setData(const char *data, int size)
Это перегруженный метод.
Устанавливает содержимое внутреннего буфера в первые size байт из data.
[override virtual] qint64 QBuffer::size() const
Переопределяет: QIODevice::size() const.
[override virtual protected] qint64 QBuffer::writeData(const char *data, qint64 len)
Переопределяет: QIODevice::writeData(const char *data, qint64 maxSize).
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qbuffer.html