Читаем QT 4: программирование GUI на С++ полностью

Теперь мы реализуем загрузку и сохранение файла данных для приложения Электронная таблица, используя двоичный пользовательский формат. Для этого мы используем объекты QFile и QDataStream, которые совместно обеспечивают независимый от платформы ввод—вывод в двоичном формате.

Мы начнем с записи файла данных Электронная таблица:

01 bool Spreadsheet::writeFile(const QString &fileName)

02 {

03 QFile file(fileName);

04 if (!file.open(QIODevice::WriteOnly)) {

05 QMessageBox::warning(this, tr("Spreadsheet"),

06 tr("Cannot write file %1:\n%2.")

07 .arg(file.fileName())

08 .arg(file.errorString()));

09 return false;

10 }

11 QDataStream out(&file);

12 out.setVersion(QDataStream::Qt_4_1);

13 out << quint32(MagicNumber);

14 QApplication::setOverrideCursor(Qt::WaitCursor);

15 for (int row = 0; row < RowCount; ++row) {

16 for (int column = 0; column < ColumnCount; ++column) {

17 QString str = formula(row, column);

18 if (!str.isEmpty())

19 out << quint16(row) << quint16(column) << str;

20 }

21 }

22 QApplication::restoreOverrideCursor();

23 return true;

24 }

Функция writeFile() вызывается из MainWindow::saveFile() для записи файла на диск. Она возвращает true при успешном завершении и false при ошибке.

Мы создаем объект QFile, задавая имя файла, и вызываем функцию open() для открытия файла для записи данных. Мы также создаем объект QDataStream, который предназначен для работы с QFile и использует его для записи данных.

Непосредственно перед записью данных мы изменяем курсор приложения на стандартный курсор ожидания (обычно он имеет вид песочных часов) и затем восстанавливаем нормальный курсор после окончания записи данных. В конце функции файл автоматически закрывается деструктором QFile.

QDataStream поддерживает основные типы С++ совместно со многими типами Qt. Их синтаксис напоминает синтаксис классов стандартного С++. Например,

out << x << у << z;

выполняет запись в поток значений переменных x, у и z, а

in >> x >> у >> z;

считывает их из потока. Поскольку базовые типы С++, такие как char, short, int, long и long long, на различных платформах могут иметь различный размер, надежнее преобразовать их типы в qint8, quint8, qint16, quint16, qint32, quint32, qint64 и quint64, что гарантирует использование объявленного в них размера (в битах).

Файл данных Электронная таблица имеет очень простой формат. Он начинается с 32-битового числа, идентифицирующего формат файла («волшебное» число MagicNumber определено в spreadsheet.h как 0x7F51C883 — произвольное случайное число). Затем идет последовательность блоков, каждый из которых содержит строку, столбец и формулу одной ячейки. Для экономии места мы не заполняем пустые ячейки.

Рис. 4.3. Формат файла данных для приложения Электронная таблица.

Точное представление типов данных определяется в QDataStream. Например, quint16 представляется двумя байтами со старшим байтом в конце, a QString задается длиной строки, за которой следуют символы в коде Unicode.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных