06 return currencyAt(section);
07 }
Функция
01 void CurrencyModel::setCurrencyMap(const QMap
02 {
03 currencyMap = map;
04 reset();
05 }
Вызывающая программа может изменить набор валют, используя функцию
01 QString CurrencyModel::currencyAt(int offset) const
02 {
03 return (currencyMap.begin() + offset).key();
04 }
Функция
Как мы только что могли убедиться, нетрудно создавать модели, используемые только для чтения, и при определенном характере исходных данных в хорошо спроектированной модели в принципе можно сэкономить память и увеличить быстродействие. В следующем примере приложения Города (Cities) также используется табличная модель, но на этот раз все данные вводятся пользователем.
Это приложение используется для хранения расстояний между любыми двумя городами. Как и в предыдущем примере, мы могли бы просто использовать табличный виджет
Для сравнения пользовательской модели с простой таблицей предположим, что у нас имеется три города:
Ниже показано, как мы настраиваем и используем модель:
QStringList cities;
cities << "Arvika" << "Boden" << "Eskilstuna" << "Falun"
<< "Filipstad" << "Halmstad" << "Helsingborg" << "Karlstad"
<< "Kiruna" << "Kramfors" << "Motala" << "Sandviken"
<< "Skara" << "Stockholm" << "Sundsvall" << "Trelleborg";
CityModel CityModel;
cityModel.setCities(cities);
QTableView tableView;
tableView.setModel(&cityModel);
tableView.setAlternatingRowColors(true);
Мы должны переопределить те же самые функции, которые мы переопределяли в предыдущем примере. Кроме того, для обеспечения возможности редактирования модели мы должны переопределить
01 class CityModel : public QAbstractTableModel
02 {
03 Q_OBJECT
04 public:
05 CityModel(QObject *parent = 0);
06 void setCities(const QStringList &cityNames);
07 int rowCount(const QModelIndex &parent) const;
08 int columnCount(const QModelIndex &parent) const;
09 QVariant data(const QModelIndex &index, int role) const;
10 bool setData(const QModelIndex &index, const QVariant &value,
11 int role);
12 QVariant headerData(int section, Qt::Orientation orientation,
13 int role) const;
14 Qt::ItemFlags flags(const QModelIndex &index) const;
15 private: