Russian Qt Forum
Ноябрь 02, 2024, 01:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] Получить QmodelIndex по id  (Прочитано 2875 раз)
unkeep
Гость
« : Июль 11, 2013, 17:49 »

Здравствуйте. Есть древовидная  модель SqlTreeModel:QAbstractItemModel

Необходимо получить QModelIndex по id. (Нужно для вставки элемента из одной модели в другую для быстрого поиска его родителя во вставляемой модели )

Есть ли какие-то решения?


Пока склоняюсь к QHash в котором будут связки id-QModelIndex.
Минусы: нужно сдвигать все индексы узла после  удаления или вставки элемента.

« Последнее редактирование: Июль 15, 2013, 10:04 от unkeep » Записан
mutineer
Гость
« Ответ #1 : Июль 11, 2013, 20:15 »

QModelIndexList QAbstractItemModel::match попробуй
Записан
unkeep
Гость
« Ответ #2 : Июль 12, 2013, 10:01 »

QModelIndexList QAbstractItemModel::match попробуй
не катит, медленно(
Записан
unkeep
Гость
« Ответ #3 : Июль 15, 2013, 10:03 »

сделал через хеш. при загрузке индексация рута с рекурсией для дочерних узлов (сохраняем в хеш пары id-index). При вставке в узел переиндексирую родительский узел. При удалении в узле - удаляю из хеша (включая дочерние элементы) и переиндексирую родительский узел.

Индексация узла у меня такая:

Код
C++ (Qt)
void ToIndexNode(const QModelIndex &parent,bool withChilds)
{
   const int childsCount = rowCount(parent);
   for (int i=0;i<childsCount;i++)
   {
 
       QModelIndex childIndex = index(i,0,parent);
       IdType childId = GetId(childIndex);
       _indexes.insert(childId,childIndex);
       if (withChilds)
       {
           ToIndexNode(childIndex,withChilds);
       }
   }
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.145 секунд. Запросов: 21.