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

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

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

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

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


person braggPeaks    schedule 15.03.2013    source источник


Ответы (3)


Довольно поздний ответ, но все еще может быть полезен:

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

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

person Moia    schedule 05.11.2018

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

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

person Frankie Simon    schedule 17.07.2014

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

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

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

person user2155932    schedule 15.03.2013