QT 4: программирование GUI на С++ | страница 67
>15 void clear();
>16 bool readFile(const QString &fileName);
>17 bool writeFile(const QString &fileName);
>18 void sort(const SpreadsheetCompare &compare);
Функция autoRecalculate() реализуется как встроенная (inline), поскольку она лишь показывает, задействован или нет режим автоматического перерасчета.
В главе 3 мы опирались на использование некоторых открытых функций класса электронной таблицы Spreadsheet при реализации MainWindow Например, из MainWindow::newFile() мы вызывали функцию clear() для очистки электронной таблицы. Кроме того, мы вызывали некоторые функции, унаследованные от QTableWidget, а именно setCurrentCell() и setShowGrid().
>19 public slots:
>20 void cut();
>21 void copy();
>22 void paste();
>23 void del();
>24 void selectCurrentRow();
>25 void selectCurrentColumn();
>26 void recalculate();
>27 void setAutoRecalculate(bool recalc);
>28 void findNext(const QString &str, Qt::CaseSensitivity cs);
>29 void findPrevious(const QString &str, Qt::CaseSensitivity cs);
>30 signals:
>31 void modified();
Класс Spreadsheet содержит много слотов, которые реализуют действия пунктов меню Edit, Tools и Options, и он содержит один сигал modified() для уведомления о возникновении любого изменения.
>32 private slots:
>33 void somethingChanged();
Мы определяем один закрытый слот, который используется внутри класса Spreadsheet.
>34 private:
>35 enum { MagicNumber = 0x7F51C883, RowCount = 999, ColumnCount = 26 };
>36 Cell *cell(int row, int column) const;
>37 QString text(int row, int column) const;
>38 QString formula(int row, int column) const;
>39 void setFormula(int row, int column, const QString &formula);
>40 bool autoRecalc;
>41 };
В закрытой секции этого класса мы объявляем три константы, четыре функции и одну переменную.
>42 class SpreadsheetCompare
>43 {
>44 public:
>45 bool operator()(const QStringList &row1, const QStringList &row2) const;
>46 enum { KeyCount = 3 };
>47 int keys[KeyCount];
>48 bool ascending[KeyCount];
>49 };
>50 #endif
Заголовочный файл заканчивается определением класса SpreadsheetCompare. Мы объясним назначение этого класса при рассмотрении функции Spreadsheet::sort().
Теперь мы рассмотрим реализацию:
>01 #include
>02 #include "cell.h"
>03 #include "spreadsheet.h"
>04 Spreadsheet::Spreadsheet(QWidget *parent)
>05 : QTableWidget(parent)
>06 {
>07 autoRecalc = true;