Класс 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, который использует указанный в byteArray QByteArray в качестве внутреннего буфера и заданным 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.
Если буфер открыт в режиме записи или чтения и записи и в него что-то записывается, то 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.1/qbuffer.html