Класс 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
- 6 сигналов унаследованы от 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()
Уничтожает буфер.
[virtual] bool QBuffer::atEnd() const
Переопределено из QIODevice::atEnd().
QByteArray &QBuffer::buffer()
Возвращает ссылку на внутренний буфер QBuffer. Вы можете использовать его для изменения QByteArray за кулисами QBuffer.
См. также setBuffer() и data().
const QByteArray &QBuffer::buffer() const
Это перегруженная функция.
Это то же самое, что и data().
[virtual] bool QBuffer::canReadLine() const
Переопределено из QIODevice::canReadLine().
[virtual] 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/qt-5.9/qbuffer.html