Как правильно получить доступ к QMap в QAbstractTableModel::data()

Я получил QMap с идентификатором и соответствующим объектом. При создании подкласса QAbstractTableModel::data() вы получаете QModelIndex со строкой и столбцом соответственно. Каждая строка должна представлять один объект (QAbstractTableModel::rowCount() - это myMap->size()).

Законно ли получить текущий объект через

myMap->values().at(index.row())

Имеет ли это последствия (сортировка, вставка), потому что идентификаторы (несортированные) карты игнорируются? Я имею в виду для QAbstractTableModel::setData() мне нужно сделать тот же идентификатор карты в обход?! Благодарю.

3 ответа

Довольно поздний ответ, но все же может пригодиться:

(myMap->constBegin() + index.row()).key();
(myMap->constBegin() + index.row()).value();

сделает трюк, избегая копию values() метод

Когда вы говорите "идентификатор", я предполагаю, что вы имеете в виду ключ, а "соответствующий объект" является значением. QMap по определению отсортировано по ключу.

Если вы никогда не собираетесь использовать QMap функциональность ключ-значение, вы должны рассмотреть возможность хранения ваших значений в QList контейнер и доступ к нему на основе индекса строки, как вы предложили.

QMap::values возвращает все значения в порядке возрастания их ключей, поэтому, вероятно, ваш код будет работать. Тем не менее, я бы использовал что-то вроде следующего:

myMap[this->index(index.row(), 0).data().toString()]

при условии, что вы вызываете его из QAbstractTableModel, а ваши ключи находятся в 0-м столбце.

Другие вопросы по тегам