Вход/Регистрация
QT 4: программирование GUI на С++
вернуться

Саммерфилд Марк

Шрифт:

06 void Cell::setFormula(const QString &formula)

07 {

08 setData(Qt::EditRole, formula);

09 }

Функция setFormula задает формулу ячейки. Это просто удобная функция для вызова setData с указанием роли правки. Она вызывается из функции Spreadsheet::setFormula.

10 QString Cell::formula const

11 {

12 return data(Qt::EditRole).toString;

13 }

Функция formula вызывается из Spreadsheet::formula. Подобно setFormula этой функцией удобно пользоваться на этот раз для получения данных EditRole заданного элемента.

14 void Cell::setData(int role, const QVariant &value)

15 {

16 QTableWidgetltem::setData(role, value);

17 if (role == Qt::EditRole)

18 setDirty;

19 }

Если мы имеем новую формулу, мы устанавливаем cacheIsDirty на значение true, чтобы обеспечить перерасчет ячейки при последующем вызове text.

В Cell нет определения функции text, хотя мы и вызываем text для экземпляров Cell в функции Spreadsheet::text. QTableWidgetltem содержит удобную функцию text, которая эквивалентна вызову data(Qt::DisplayRole).toString.

20 void Cell::setDirty

21 {

22 cacheIsDirty = true;

23 }

Функция setDirty вызывается для принудительного перерасчета значения ячейки. Она просто устанавливает флажок cacheIsDirty на значение true, указывая на то, что значение cachedValue больше не отражает текущее состояние. Перерасчет не будет выполняться до тех пор, пока он не станет действительно необходим.

24 QVariant Cell::data(int role) const

25 {

26 if (role == Qt::DisplayRole) {

27 if (value.isValid) {

28 return value.toString;

29 } else {

30 return "####";

31 }

32 } else if (role == Qt::TextAlignmentRole) {

33 if (value.type == QVariant::String) {

34 return int(Qt::AlignLeft | Qt::AlignVCenter);

35 } else {

36 return int(Qt::AlignRight | Qt::AlignVCenter);

37 }

38 } else {

39 return QTableWidgetltem::data(role);

40 }

41 }

Функция data класса QTableWidgetltem переопределяется. Она возвращает текст, который должен отображаться в электронной таблице, если в вызове указана роль Qt::DisplayRole, или формулу, если в вызове указана роль Qt::EditRole. Она обеспечивает подходящее выравнивание, если вызывается с ролью Qt::TextAlignmentRole. При задании роли DisplayRole она использует функцию value для расчета значения ячейки. Если нельзя получить достоверное значение (из-за того, что формула неверна), мы возвращаем значение «####».

Функция Cell::value, используемая в data, возвращает значение типа QVariant. Объекты типа QVariant могут содержать значения различных типов, например double или QString, и поддерживают функции для преобразования их в другие типы. Например, при вызове toString для переменной типа QVariant, содержащей значение типа double, в результате мы получим строковое представление числа с двойной точностью. Используемый по умолчанию конструктор QVariant устанавливает значение «invalid» (недопустимое).

42 const QVariant Invalid;

43 QVariant Cell::value const

44 {

45 if (cacheIsDirty) {

46 cacheIsDirty = false;

47 QString formulaStr = formula;

48 if (formulaStr.startsWith('\'')) {

49 cachedValue = formulaStr.mid(1);

50 } else if (formulaStr.startsWith('=')) {

51 cachedValue = Invalid;

  • Читать дальше
  • 1
  • ...
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: