Читаем QT 4: программирование GUI на С++ полностью

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;

08 setItemPrototype(new Cell);

09 setSelectionMode(ContiguousSelection);

10 connect(this, SIGNAL(itemChanged(QTableWidgetItem *)),

11 this, SLOT(somethingChanged()));

12 clear();

13 }

Обычно при вводе пользователем некоторого текста в пустую ячейку QTableWidget будет автоматически создавать элемент QTableWidgetltem для хранения этого текста. Вместо этого мы хотим, чтобы создавались элементы Cell. Это достигается с помощью вызова в конструкторе функции setItemPrototype(). Всякий раз, когда требуется новый элемент, QTableWidget дублирует элемент, переданный в качестве прототипа.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных