16 bool readFile(const QString &fileName);
17 bool writeFile(const QString &fileName);
18 void sort(const SpreadsheetCompare &compare);
Функция
В главе 3 мы опирались на использование некоторых открытых функций класса электронной таблицы
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();
Класс
32 private slots:
33 void somethingChanged();
Мы определяем один закрытый слот, который используется внутри класса
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
Заголовочный файл заканчивается определением класса
Теперь мы рассмотрим реализацию:
01 #include
02 #include "cell.h"
03 #include "spreadsheet.h"
04 Spreadsheet::Spreadsheet(QWidget *parent)
05 : QTableWidget(parent)
06 {
07 autoRecalc = true;
08 setItemPrototype(new Cell);
09 setSelectionMode(ContiguousSelection);
10 connect(this, SIGNAL(itemChanged(QTableWidgetItem *)),
11 this, SLOT(somethingChanged()));
12 clear();
13 }
Обычно при вводе пользователем некоторого текста в пустую ячейку