Класс 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.0/qbuffer.html