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

Закрытая функция cell() возвращает для заданной строки и столбца объект Cell. Она работает почти так же, как QTableWidget::item(), но возвращает указатель на Cell, а не указатель на QTableWidgetltem.

01 QString Spreadsheet::text(int row, int column) const

02 {

03 Cell *c = cell(row, column);

04 if (с) {

05 return c->text();

06 } else {

07 return "";

08 }

09 }

Закрытая функция text() возвращает формулу заданной ячейки. Если cell() возвращает нулевой указатель, то это означает, что ячейка пустая, и поэтому мы возвращаем пустую строку.

01 QString Spreadsheet::formula(int row, int column) const

02 {

03 Cell *c = cell(row, column);

04 if (с) {

05 return c->formula();

06 } else {

07 return "";

08 }

09 }

Функция formula() возвращает формулу ячейки. Во многих случаях формула и текст совпадают; например формула «Hello» соответствует строке «Hello», поэтому при вводе пользователем в ячейку строки «Hello» и нажатии клавиши Enter в ячейке отобразится текст «Hello». Но имеется несколько исключений:

• Если формула представлена числом, именно оно и будет отображаться. Например, формула «1.50» обозначает значение 1.5 типа double, которое отображается в электронной таблице как выровненное вправо значение «1.5».

• Если формула начинается с одиночной кавычки, остальная часть формулы интерпретируется как текст. Например, результатом формулы «'12345» будет строка «12345».

• Если формула начинается со знака равенства («=»), то ее значение интерпретируется как арифметическое выражение. Например, если ячейка A1 содержит «12» и ячейка A2 содержит «6», то результатом формулы «=A1+A2» будет 18. Задача преобразования формулы в значение выполняется классом Cell. Здесь следует иметь в виду, что отображаемый в ячейке текст соответствует значению, полученному в результате расчета формулы, а не является текстом самой формулы.

01 void Spreadsheet::setFormula(int row, int column, const QString &formula)

02 {

03 Cell *c = cell(row, column);

04 if (!c) {

05 с = new Cell;

06 setItem(row, column, с);

07 }

08 c->setFormula(formula);

09 }

Закрытая функция setFormula() задает формулу для указанной ячейки. Если ячейка уже имеет объект Cell, мы его повторно используем. В противном случае мы создаем новый объект Cell и вызываем QTableWidget::setItem() для вставки его в таблицу. В конце мы вызываем для этой ячейки функцию setFormula(), что приводит к перерисовке ячейки, если она отображается на экране. Нам не надо беспокоиться об удалении в будущем объекта Cell; QTableWidget является собственником ячейки и будет автоматически удалять ее содержимое в нужное время.

01 QString Spreadsheet::currentLocation() const

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().

<p>Загрузка и сохранение</p>
Перейти на страницу:

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

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

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

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

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

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

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

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