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;