Russian Qt Forum

Qt => Model-View (MV) => Тема начата: unkeep от Июль 11, 2013, 17:49



Название: [РЕШЕНО] Получить QmodelIndex по id
Отправлено: unkeep от Июль 11, 2013, 17:49
Здравствуйте. Есть древовидная  модель SqlTreeModel:QAbstractItemModel

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

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


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



Название: Re: Получить QmodelIndex по id
Отправлено: mutineer от Июль 11, 2013, 20:15
QModelIndexList QAbstractItemModel::match попробуй


Название: Re: Получить QmodelIndex по id
Отправлено: unkeep от Июль 12, 2013, 10:01
QModelIndexList QAbstractItemModel::match попробуй
не катит, медленно(


Название: Re: Получить QmodelIndex по id
Отправлено: unkeep от Июль 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);
       }
   }
}