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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTreeWidget сформировать дерево в соответствии с условием  (Прочитано 2087 раз)
xwicked
Гость
« : Сентябрь 16, 2014, 15:28 »

Привет всем!
Есть xml-ка, в ней хранятся несколько характеристик предмета. Сделал QVector объектов класса TListElements -QVector<TListElements> leAllElement;
Код
C++ (Qt)
class TListElements
{
public:
 
   QString sName;//Название товара
   QString sGUIDParent;//GUID родителя
   QString sGUID;//GUID
   QString sCount;//Количество
 
   TListElements();
};
Код
C++ (Qt)
   while (i < handler1.leAllElement.count())
   {
       //Если GUID родителя все нули,
       if (handler1.leAllElement.at(i).sGUIDParent == "00000000-0000-0000-0000-000000000000")
       {
           //            slCurrentGUIDs.append(handler1.leAllElement.at(i).sGUID);
 
           sTemp = handler1.leAllElement.at(i).sGUID;
 
           if (slCurrentGUIDs.indexOf(sTemp, 0) == -1)
           {
               slCurrentGUIDs.append(sTemp);
               items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(handler1.leAllElement.at(i).sName)));
               items2.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(handler1.leAllElement.at(i).sGUID)));
                //После того как элемент добавлен в QTreeWidget он удаляется из списка
               handler1.leAllElement.remove(i);
               i = -1;
           }
       }
 
       i++;
   }
 
   //это означает, что элемент-родитель
   ui->treeWidget->addTopLevelItems(items);
   handler1.twTemp->addTopLevelItems(items2);
   slHistoryGUIDs.append(slCurrentGUIDs);
   QModelIndex miTemp;
   slCurrentGUIDs.clear();
   i = 0;
   int j = 0;
   int k = 0;
   //miTemp.sibling(0,0);
   ui->treeWidget->setCurrentIndex(ui->treeWidget->model()->index(0,0));
 
   while(j < ui->treeWidget->topLevelItemCount())
   {
       i = 0;
       ui->treeWidget->setCurrentIndex(ui->treeWidget->model()->index(j,0));
       handler1.twTemp->setCurrentIndex(ui->treeWidget->model()->index(j,0));
       while (i < handler1.leAllElement.count())
       {
           k = 0;
           slCurrentGUIDs.clear();
           while(k < ui->treeWidget->currentItem()->childCount())
           {
               //Если родительский GUID потомка == текущему GUID, то он добавляется как потомок выбранному элементу
               if (handler1.leAllElement.at(i).sGUIDParent == handler1.twTemp->currentItem()->child(k)->text(ui->treeWidget->currentIndex().column()))
               {
                   sTemp = handler1.leAllElement.at(i).sGUID;
 
                   //Нужно, чтобы GUID не повторялся
                   if (slCurrentGUIDs.indexOf(sTemp, 0) == -1)
                   {
                       slCurrentGUIDs.append(sTemp);
 
                       if (!handler1.leAllElement.at(i).sName.isEmpty()) items.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(handler1.leAllElement.at(i).sName)));
                       if (!handler1.leAllElement.at(i).sGUID.isEmpty()) items2.append(new QTreeWidgetItem((QTreeWidget*)0, QStringList(handler1.leAllElement.at(i).sGUID)));
 
                       //После того как элемент добавлен в QTreeWidget он удаляется из списка
                       handler1.leAllElement.remove(i);
                   }
               }
               k++;
           }
           i++;
       }
 
       ui->treeWidget->currentItem()->addChildren(items);
       handler1.twTemp->currentItem()->addChildren(items2);
       //miTemp.sibling(j,0);
       //ui->treeWidget->setCurrentIndex(miTemp);
       j++;
   }
Задача сделать дерево из элементов с большой вложенностью до 10-15 потомков, в соответствии с условием принадлежности к определённому родителю. Если GUID родителя все нули, это означает, что элемент-родитель. Если родительский GUID потомка == текущему GUID, то он добавляется как потомок выбранному элементу или что-то подобное.
Понял, что заполнять нужно последовательно, начиная с toplevel, но запутался конкретно, код можно не смотреть, а направить в нужную сторону. Может лучше модель использовать + QTreeView?

Благодарю за ответы!
« Последнее редактирование: Сентябрь 16, 2014, 15:31 от xwicked » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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