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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: О добавлении элементов в модель  (Прочитано 1860 раз)
Urvin
Гость
« : Октябрь 29, 2010, 21:10 »

Помогите, пожалуйста разобраться с добавлением новых элементов в модель.

Для простого случая с QAbstractTableModel я делаю так:
Код
C++ (Qt)
void tUMCLientsTableModel::ShoutAddNewClient(tUMDCClientInfo aNewClient)
{
   beginInsertRows(QModelIndex(), fClientList.fClientList.count(), fClientList.fClientList.count());
   fClientList.append(aNewClient);
   endInsertRows();
}
Т.е. просто вставляю в список новый объект, используя insertRows. Дальнейшей сортировкой и отображением соответвенно занимаются прокси-модель и комбобокс.

Теперть то же самое мне надо сотворить с моделью дерева QAbstractItemModel. Она построена по методу Бланшета-Саммерфельда, т.е. имеем класс узла дерева со ссылками на детей и родителя, имеем "нулевой" родительский узел - объект класса же узла. Фактически не пользуемся QModelIndex.

Код
C++ (Qt)
RootNode - не отображаемо
--Node1
----Node1.1
----Node1.2
--Node2
--Node3

В текущей ситуации для добавления нового элемента используется такая конструкция:
Код
C++ (Qt)
void tUMClientsModel::AddNewClient(tUMDCClientInfo &aNewClient, bool aUseBeginInsert)
{
   if (aNewClient.fClientParentID == 0)
       fRootNode->fChildrenList.append(new tUMClientsNode(fRootNode, aNewClient));
   else
       for (int i = 0; i < fRootNode->fChildrenList.count(); i++)
           if (fRootNode->fChildrenList[i]->fClientInfo.fClientID == aNewClient.fClientParentID)
           {
               fRootNode->fChildrenList[i]->fChildrenList.append(
                       new tUMClientsNode(fRootNode->fChildrenList[i], aNewClient)
                       );
               break;
           }
}
У класса объекта есть поле индекса и поле индекса родителя. При добавлении проверяется соответствие индекса родителя и индекса каждого из текущих узлов.
Для команды beginInsertRows нам необходимо знать QModelIndex узла, в который мы добавляем новый элемент.

Как узнать его для моего класса узла tUMClientsNode - "нулевого" родительского или какого-то иного?

Для обратного преобразования внутри модели используется
Код
C++ (Qt)
tUMClientsNode *lNode = static_cast<tUMClientsNode*>(aParent.internalPointer());

Спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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