Класс QDataStream
Оглавление
Класс QDateStream является гарантом того, что формат, в котором будут записаны данные, останется платформонезависимым и его можно будет считать и обработать на других платформах. Это делает класс незаменимым для обмена данными по сети с использованием сокетных соединений.
Формат данных, используемый QDataStream, в процессе разработки версии Qt претерпел множество изменений и продолжает изменяться. По этой причине этот класс знаком с различными типами версий, и для того чтобы заставить его использовать формат обмена, соответствующий определенной версии Qt, нужно вызвать метод setVersion(), передав ему идентификатор версии. Текущая версия имеет идентификатор Qt_4_2.
Класс поддерживает большое количество типов данных, к которым относятся: QByteArray, QFont, QImage, QMap, QPixmap, QString, QValueList и Variant.
Следующий пример записывает в файл объект точки (QPointF), задающей позицию растрового изображение вместе с объектом растрового изображения (QImage):
QFile file("file.bin");
if(file.open(QIODevice::WriteOnly))
{
QDataStream stream(&file);
stream. setVersion(QDataStream::Qt_4_2);
stream << QPointF(30, 30) << QImage("image.png");
if(stream.status() != QDataStream::Ok)
{
qDebug() << "Ошибка записи";
}
}
file.close();
Для чтения этих данных из файла нужно сделать следующее:
QPointF pt;
QImage img;
QFile file("file.bin");
if(file.open(QIODevice::ReadOnly))
{
QDataStream stream(&file);
stream.setVersion (QDataStream::Qt_4_2) ;
stream >> pt >> img;
if(stream.status() != QDataStream::Ok)
{
qDebug() << "Ошибка чтения файла";
}
file.close();
}
Qt имеет абстрактный класс QIODevice, который представляет собой устройство ввода/вывода. Классы, унаследованные от QIODevice, предоставляют возможность записи и чтения данных в файл байтами или блоками. QFile и QBuffer наследуют этот класс.
Класс QFile содержит методы, необходимые для работы с файлами, такие как: открытие, закрытие, чтение и запись.
Класс QBuffer предназначен для эмуляции файлов в оперативной памяти.
Такие файлы хранятся не на диске, а в памяти компьютера, что существенно ускоряет процесс обращения к ним.
Класс QDir предоставляет платформонезависимый подход для работы с директориями. Этот класс содержит методы для создания и уничтожения директорий, а также для получения главной, текущей и персональной директории пользователя.
При помощи класса QFileInfo можно получить всю необходимую информацию о файлах и директориях.
Qt предоставляет классы потоков, которые делают удобной работу с данными файлов: QDataStream для двоичных данных, a QTextStream для текстовых. Использование этих потоков очень похоже на использование обычного потока в языке C++. Как и в стандартных потоках, для чтения и записи перегружены операторы << и >>. Так как потоки принимают объекты, унаследованные от QIODevice-классов, то, вместо объекта класса QFile, данные можно перенаправить в объект класса QBuffer.
Читать далее: Программирование баз данных с помощью Qt