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, задавая имя файла, и вызываем функцию