12 QString currencyAt(int offset) const;
13 QMap
14 };
Для нашей модели мы использовали подкласс
Для модели таблицы, используемой только для чтения, мы должны переопределить три функции:
01 CurrencyModel::CurrencyModel(QObject*parent)
02 : QAbstractTableModel(parent)
03 {
04 }
В конструкторе нам ничего не надо делать, кроме передачи базовому классу
01 int CurrencyModel::rowCount(const QModelIndex &
02 /* родительский элемент */) const
03 {
04 return currencyMap.count;
05 }
06 int CurrencyModel::columnCount(const QModelIndex &
07 /* родительский элемент */) const
08 {
09 return currencyMap.count;
10 }
В этой табличной модели счетчики строк и столбцов представляют собой номера валют в ассоциативном массиве валют. Параметр
01 QVariant CurrencyModel::data(const QModelIndex &index, int role) const
02 {
03 if (!index.IsValid)
04 return QVariant;
05 if (role == Qt::TextAlignmentRole) {
06 return int(Qt::AlignRight | Qt::AlignVCenter);
07 } else if (role == Qt::DisplayRole) {
08 QString rowCurrency = currencyAt(index.row);
09 QString columnCurrency = currencyAt(index.column);
10 if (currencyMap.value(rowCurrency) == 0.0)
11 return "####";
12 double amount = currencyMap.value(columnCurrency)
13 / currencyMap.value(rowCurrency);
14 return QString("%1").arg(amount, 0, 'f', 4);
15 }
16 return QVariant;
17 }
Функция
Если используется роль
Мы могли бы возвращать рассчитанное значение типа
01 QVariant CurrencyModel::headerData(int section,
02 Qt::Orientation /* ориентация */, int role) const
03 {
04 if (role != Qt::DisplayRole)
05 return QVariant;
06 return currencyAt(section);
07 }