Класс QBuffer
Класс QBuffer предоставляет интерфейс QIODevice для QByteArray. Подробнее...
| Заголовок: | #include <QBuffer> |
| qmake: | QT += core |
| Наследует: | QIODevice |
Примечание: Все функции в этом классе являются перевключёнными.
Открытые функции
| QBuffer(QObject *parent = nullptr) | |
| QBuffer(QByteArray *byteArray, 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 |
Статические открытые члены
| const QMetaObject | staticMetaObject |
- 10 статических открытых членов унаследованных от QObject
Переопределённые защищённые функции
| virtual qint64 | readData(char *data, qint64 len) override |
| virtual qint64 | writeData(const char *data, qint64 len) override |
Дополнительные унаследованные члены
- 1 свойство унаследованное от QObject
- 1 открытый слот унаследованный от QObject
- 6 сигналов унаследованных от QIODevice
- 2 сигнала унаследованных от 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 = nullptr)
Конструирует пустой буфер с заданным parent. Вы можете вызвать setData(), чтобы заполнить буфер данными, или открыть его в режиме записи и использовать write().
См. также open().
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().
[virtual] QBuffer::~QBuffer()
Уничтожает буфер.
[override virtual] bool QBuffer::atEnd() const
Переопределяет QIODevice::atEnd().
QByteArray &QBuffer::buffer()
Возвращает ссылку на внутренний буфер QBuffer. Вы можете использовать его для изменения QByteArray, находящегося внутри QBuffer.
См. также setBuffer() и data().
const QByteArray &QBuffer::buffer() const
Это перегруженная функция.
То же самое, что и data().
[override virtual] bool QBuffer::canReadLine() const
Переопределяет QIODevice::canReadLine().
[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().
[override virtual] qint64 QBuffer::pos() const
Переопределено из QIODevice::pos().
[override virtual protected] qint64 QBuffer::readData(char *data, qint64 len)
Переопределено из QIODevice::readData().
[override 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.
[override virtual] qint64 QBuffer::size() const
Переопределено из QIODevice::size().
[override 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.12/qbuffer.html