На этом шаге рассмотрим класс 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();Файлы приложения можно взять здесь.
На следующем шаге рассмотрим технологию "модель-представление".