У меня есть QHash элементов, которые я хочу отобразить в QTableView. Поэтому мне нужна модель. MyClass имеет внутренний идентификатор, который используется для вставки в карту. Что-то вроде этого:Создание модели для данных, хранящихся в QHash
// when adding a new item
my_super_hash[item->id] = item;
При реализации модели я обнаружил, что все методы в модели говорят о «индекс», который был щелкнули (или что-то ...).
Может ли кто-нибудь пересказать мне, как карта между QHash и моделью? (QHash, основанный на ключах, и модель основана на индексе).
Вариант 1 - не идеальный
Одним из вариантов является создание при запуске список, который отображает между индексом к ключу:
int i = 0;
foreach(MyClass* c, my_super_hash)
conversion[i] = c->id
Теперь внутри моделей повторно реализации методы, я использую
int key = conversion[index.row()];
MyClass * value = my_super_hash[key];
Эта идея кажется беспорядочной, d Я хочу улучшить реализацию.
Я, вероятно, не понимаю, что вы спрашиваете, или я не могу понять, что-то о реализации MVC в Qt4: QModelIndex Я получаю конкретный столбец/строку en щелкнул (или был нарисован). Я не могу использовать этот номер в качестве значения ключа, поскольку идентификатор может начинаться с 1000, а модель может содержать только 10 значений (1000, 1243, 7772, 9811234). – elcuco
Извините, я предполагал, что ключи в хэше будут упорядочены как 1-20, чтобы вы могли использовать их в качестве индексов. Но я вижу, что это не так. Ну, на мой взгляд, ваша реализация хоть и беспорядочна, но неизбежна. В моей практике я обычно использую QMaps, если ключи в моих данных не могут использоваться в качестве индексов. – Neox
Добавьте новый ответ, говоря «используйте QMap вместо QHash», и вы получите больше репутации, и этот вопрос получит зеленый знак. – elcuco