БлогNot. QT: выгружаем стандартный контейнер в файл и загружаем обратно

QT: выгружаем стандартный контейнер в файл и загружаем обратно

В продолжение темы стандартных контейнеров QT и работы с ними...

Для простоты создано консольное приложение, в котором показаны запись и чтение бинарного файла, содержимым файла будут 2 списка - один из строк QString, другой - из целых чисел. При конфигурации QT по умолчанию, файл создастся в папке build-… проекта. В файле проекта .pro есть строка

QT       -= qui

- то есть, графический интерфейс не нужен.

Код файла main.cpp (единственный файл проекта):

#include <QFile>
#include <QDataStream>
#include <QList>
#include <QDebug>

int main() {
 //Пишем 2 списка в файл
 QList <QString> stringList;
 QList <int> intList;
 stringList << "one" << "two" << "three";
 intList << 1 << 2 << 3;
 QFile f("data.dat");
 if (f.open(QIODevice::WriteOnly)) {
  QDataStream stream(&f);
  stream << stringList << intList;
  if (stream.status()!=QDataStream::Ok) {
      qDebug() << "File write error"; return 1;
  }
  else {
      qDebug() << "File writed successfully";
  }
 }
 else {
  qDebug() << "File open error for writing"; return 2;
 }
 //Читаем из файла то, что записали
 f.close();
 stringList.clear(); intList.clear();
 if (f.open(QIODevice::ReadOnly)) {
  QDataStream stream(&f);
  stream >> stringList >> intList;
  if (stream.status()!=QDataStream::Ok) {
      qDebug() << "File read error"; return 3;
  }
  else {
      qDebug() << "File read successfully";
      qDebug() << stringList << "\n" << intList;
  }
 }
 else {
  qDebug() << "File open error for reading"; return 4;
 }
 return 0;
}

Посмотрев на файл (data.dat, создастся в папке build-... проекта) в 16-ричном виде, легко понять, как QT хранит свои списки строк - просто длина списка в элементах, а затем записи об элементах в виде пар значений {целое количество байт, символы в UTF-8 (Юникоде)}. Для списка чисел в начале просто сохранено количество элементов в нём, а потом следуют такие же 4-байтовые числа (виджет запускался на компьютере с 32-разрядной архитектурой):

дамп файла данных QT с двумя списками
дамп файла данных QT с двумя списками

31.03.2017, 14:22 [4216 просмотров]


теги: c++ учебное qt

К этой статье пока нет комментариев, Ваш будет первым