QT 4: программирование GUI на С++ | страница 71
>02 {
>03 return QChar('A' + currentColumn())
>04 + QString::number(currentRow() + 1);
>05 }
Функция currentLocation() возвращает текущее положение ячейки, используя обычную форму представления ее координат в электронной таблице с обозначением буквой положения столбца, за которой идет номер строки. Функция MainWindow::updateStatusBar() использует ее для отображения положения ячейки в строке состояния.
>01 QString Spreadsheet::currentFormula() const
>02 {
>03 return formula(currentRow(), currentColumn());
>04 }
Функция currentFormula() возвращает формулу текущей ячейки. Она вызывается из функции MainWindow::updateStatusBar().
>01 void Spreadsheet::somethingChanged()
>02 {
>03 if (autoRecalc)
>04 recalculate();
>05 emit modified();
>06 }
Закрытый слот somethingChanged() делает перерасчет всей электронной таблицы, если включен режим Auto—Recalculate (автоматический пересчет). Он также генерирует сигнал modified().
Загрузка и сохранение
Теперь мы реализуем загрузку и сохранение файла данных для приложения Электронная таблица, используя двоичный пользовательский формат. Для этого мы используем объекты 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, задавая имя файла, и вызываем функцию