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 с двумя списками
31.03.2017, 14:22 [4445 просмотров]