Класс QBuffer
Класс QBuffer предоставляет интерфейс QIODevice для QByteArray. Подробнее...
| Заголовок: | #include <QBuffer> |
| qmake: | QT += core |
| Наследуется от: | QIODevice |
Примечание: Все функции в этом классе являются реентерабельными.
Открытые функции
| QBuffer(QObject *parent = Q_NULLPTR) | |
| QBuffer(QByteArray *byteArray, QObject *parent = Q_NULLPTR) | |
| ~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 |
| virtual bool | canReadLine() const |
| virtual void | close() |
| virtual bool | open(OpenMode flags) |
| virtual qint64 | pos() const |
| virtual bool | seek(qint64 pos) |
| virtual qint64 | size() const |
Переопределенные защищенные функции
| virtual qint64 | readData(char *data, qint64 len) |
| virtual qint64 | writeData(const char *data, qint64 len) |
Дополнительные наследуемые члены
- 1 свойство унаследовано от QObject
- 1 открытый слот унаследовано от QObject
- 4 сигнала унаследовано от QIODevice
- 2 сигнала унаследовано от QObject
- 11 статических открытых членов унаследовано от QObject
- 5 защищенных функций унаследовано от QIODevice
- 9 защищенных функций унаследовано от QObject
Подробное описание
Класс QBuffer предоставляет интерфейс QIODevice для QByteArray.
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(QObject *parent = Q_NULLPTR)
Конструирует пустой буфер с заданным parent. Вы можете вызвать setData(), чтобы заполнить буфер данными, или открыть его в режиме записи и использовать write().
См. также open().
QBuffer::QBuffer(QByteArray *byteArray, QObject *parent = Q_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()
Уничтожает буфер.
bool QBuffer::atEnd() const
Переопределено из QIODevice::atEnd().
QByteArray &QBuffer::buffer()
Возвращает ссылку на внутренний буфер QBuffer. Вы можете использовать его для изменения QByteArray под QBuffer.
См. также setBuffer() и data().
const QByteArray &QBuffer::buffer() const
Это перегруженная функция.
Это то же самое, что и data().
bool QBuffer::canReadLine() const
Переопределено из QIODevice::canReadLine().
void QBuffer::close()
Переопределено из QIODevice::close().
const QByteArray &QBuffer::data() const
Возвращает данные, содержащиеся в буфере.
Это то же самое, что и buffer().
См. также setData() и setBuffer().
[virtual] bool QBuffer::open(OpenMode flags)
Переопределено из QIODevice::open().
[virtual] qint64 QBuffer::pos() const
Переопределено из QIODevice::pos().
[virtual protected] qint64 QBuffer::readData(char *data, qint64 len)
Переопределено из QIODevice::readData().
[virtual] bool QBuffer::seek(qint64 pos)
Переопределено из QIODevice::seek().
void QBuffer::setBuffer(QByteArray *byteArray)
Использует QByteArray, указанный по byteArray, в качестве внутреннего буфера QBuffer. Вызывающий метод отвечает за обеспечение того, чтобы 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.
[virtual] qint64 QBuffer::size() const
Переопределено из QIODevice::size().
[virtual protected] qint64 QBuffer::writeData(const char *data, qint64 len)
Переопределено из QIODevice::writeData().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qbuffer.html