На этом шаге рассмотрим класс QDataStream.
Класс QDataStream является гарантом того, что формат, в котором будут записаны данные, останется платформонезависимым и его можно будет считать и обработать на других платформах. Это делает класс незаменимым для обмена данными по сети с использованием сокетных соединений.
Формат данных, используемый QDataStream, в процессе разработки версии Qt претерпел множество изменений и продолжает изменяться. По этой причине этот класс содержит информацию о версии, и для того чтобы заставить его использовать формат обмена, соответствующий определенной версии Qt, нужно вызвать метод setVersion(), передав ему идентификатор версии. Текущая версия имеет идентификатор Qt_5_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_5_2); stream << QPointF(30, 30) << QImage("image.png"); if (stream.status() != QDataStream::Ok) { qDebug() << "Ошибка записи"; } } file.close(); QPointF pt; QImage img; if(file.open(QIODevice::ReadOnly)) { QDataStream stream(&file); stream.setVersion(QDataStream::Qt_5_2); stream >> pt >> img; if (stream.status() != QDataStream::Ok) { qDebug() << "Ошибка чтения файла"; } } file.close();
Файлы приложения можно взять здесь.
На следующем шаге рассмотрим технологию "модель-представление".