Класс QBuffer
Класс QBuffer предоставляет интерфейс QIODevice для QByteArray. Подробнее...
| Заголовок: | #include <QBuffer> |
| 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(QIODevice::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(QIODevice::OpenMode flags)
Переопределяет: QIODevice::open(QIODevice::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).
void QBuffer::setBuffer(QByteArray *byteArray)
Использует QBuffer указанный в byteArray массив байт QByteArray в качестве своего внутреннего буфера. Вызывающий код отвечает за обеспечение корректности 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 равен 0, буфер создаёт свой собственный внутренний массив байт 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-5.14/qbuffer.html