Как правильно получить доступ к 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-м столбце.