Мы создаем объект
Непосредственно перед записью данных мы изменяем курсор приложения на стандартный курсор ожидания (обычно он имеет вид песочных часов) и затем восстанавливаем нормальный курсор после окончания записи данных. В конце функции файл автоматически закрывается деструктором
QDataStream поддерживает основные типы С++ совместно со многими типами Qt. Их синтаксис напоминает синтаксис классов
out << x << у << z;
выполняет запись в поток значений переменных
in >> x >> у >> z;
считывает их из потока. Поскольку базовые типы С++, такие как
Файл данных Электронная таблица имеет очень простой формат. Он начинается с 32-битового числа, идентифицирующего формат файла («волшебное» число
Точное представление типов данных определяется в
Двоичное представление типов в Qt достаточно сильно усовершенствовалось со времени выхода версии Qt 1.0. Такая тенденция, вероятно, сохранится в будущих версиях Qt, чтобы идти вровень с развитием существующих типов и обеспечить новые типы в Qt. По умолчанию класс
Класс
01 bool Spreadsheet::readFile(const QString &fileName)
02 {
03 QFile file(fileName);
04 if (!file.open(QIODevice::ReadOnly)) {
05 QMessageBox::warning(this, tr("Spreadsheet"),
06 tr("Cannot read file %1:\n%2.")
07 .arg(file.fileName)
08 .arg(file.errorString));
09 return false;
10 }
11 QDataStream in(&file);
12 in.setVersion(QDataStream::Qt_4_1);
13 quint32 magic;
14 in >> magic;
15 if (magic != MagicNumber) {
16 QMessageBox::warning(this, tr("Spreadsheet"),
17 tr("The file is not a Spreadsheet file."));
18 return false;
19 }
20 clear;
21 quint16 row;
22 quint16 column;
23 QString str;
24 QApplication::setOverrideCursor(Qt::WaitCursor);
25 while (!in.atEnd) {
26 in >> row >> column >> str;