Как можна в хеш-контейнере QYash<QString,QVariant> изменять ключи вставленных элементов без промежуточного элемента?
Получаем значение по ключу, удаляем, вставляем это значение с другим ключем
===
Вообще то приведенная мной схема чисто для примера. Можно использовать и другие варианты:
- Например взять в качестве ключа QPair ( const T1 & row, const T2 & col )
QHash<QPair<int,int>,QVariant> SrcData;
- Можно также не премещать физически столбцы/строки, а делать переиндексацию - завести например:
QHash<int,int> ColIndex; QHash<int,int> RowIndex; где ключ - VisualIndex(который фактически соответствует визуализации на уровне View), а значение - LogicalIndex(который есть соответствующая часть ключа для SrcData), аналогично тому как сделано в QHeaderView. При этом не обязательно для переиндексации использовать QHash, можно и просто массив int ColIndex[MAX_COL_NUM] если предполагается ограничение на кол-во колонок/строк.
- Можно использовать и другие подходы для оптимизации, все зависит от задачи
===
Тебе так же важно понять что источник данных(Source) и модель(Model) не обязательно одна и та же сущность(объект)!
Model по сути адаптирует или преобразует те или иные запросы к Source. Source нужно строить и оптимизировать с учетом возможных к нему запросов и не только от Model, но и от других сущностей в твоей программе.