В моей программе я хочу использовать шаблон вида / модели с view = QListView и мою собственную модель, которую я вложил в класс QAbstractListModel. Мой класс данных выглядит как
class Avtomat
{
...
map<QString, State *> states;
...
};
В моем классе моделей
class AvtomatModel : public QAbstractListModel
{
...
Avtomat a;
...
};
Я пытаюсь перегрузить функцию QAbstractItemView :: index, чтобы я мог предоставить интерфейс для редактирования карты данных.
Поскольку функция index принимает аргумент int, я решил эту проблему, предоставив следующее
State* Avtomat::pStateFromIndex(int index) const
{
map<QString, State *>::const_iterator i;
int count = 0;
for (i = states.begin(); i != states.end() && count != index; ++i)
++count;
return (*i).second;
}
так в моей индексной функции я делаю вот так
return createIndex(row, column, a.pStateFromIndex(row));
но это кажется довольно уродливым, потому что у меня есть O (n). Можете ли вы помочь мне разработать лучший способ доступа к моей карте, используя int index?