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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QStandartItem колонки  (Прочитано 3209 раз)
virtual_root
Гость
« : Сентябрь 05, 2012, 16:32 »

Доброго времени суток) пытаюсь построить такое дерево:
у каждого узла есть 2 картинки которые располагаются справа: добавить и удалить.
Для этого хотела каждому QStandartItem моей модели добавить 2 колонки, с этими картинками. Вот как пробовала делать, но не вышло - колонки не добавились, или добавились но не отображаются...
Код
C++ (Qt)
QStandardItemModel *model = new QStandardItemModel();
   model->setColumnCount(3);
   QStandardItem *itemTree = new QStandardItem();
   itemTree->setText("title");
   itemTree->setData("ID");
 
   ////////////////////////////
   QList <QStandardItem*> columns;
   //
   QStandardItem* iconPlus = new QStandardItem();
   iconPlus->setIcon(QIcon("img/add_4555.ico"));
   columns.append(iconPlus);
 
   QStandardItem* iconMinus = new QStandardItem();
   iconPlus->setIcon(QIcon("img/remove_9955.ico"));
   columns.append(iconMinus);
   //
   itemTree->appendColumn(columns);
   model->appendRow(itemTree);
Прилагаю картинку, как именно нужно сделать. Ребята, подскажите как мне добавить пару колонок к QStandardItem ? Ведь вроде он это позволяет.
Записан
Dr.Vlad
Гость
« Ответ #1 : Сентябрь 06, 2012, 12:38 »

Цитировать
Код
C++ (Qt)
QStandardItemModel *model = new QStandardItemModel();
   model->setColumnCount(3);
   QStandardItem *itemTree = new QStandardItem();
   itemTree->setText("title");
   itemTree->setData("ID");
 
   ////////////////////////////
   QList <QStandardItem*> columns;
   //
   QStandardItem* iconPlus = new QStandardItem();
   iconPlus->setIcon(QIcon("img/add_4555.ico"));
   columns.append(iconPlus);
 
   QStandardItem* iconMinus = new QStandardItem();
   iconPlus->setIcon(QIcon("img/remove_9955.ico"));
   columns.append(iconMinus);
   //
   itemTree->appendColumn(columns);
   model->appendRow(itemTree);

Во-первых, у itemTree тоже должно быть установлено количество рядов-колонок.
Во-вторых попробуйте model->setItem( int row, int column, QStandardItem * item );
Записан
virtual_root
Гость
« Ответ #2 : Сентябрь 06, 2012, 14:47 »

Спасибо, я пробовала уже так:  model->setItem( int row, int column, QStandardItem * item ); Но мне не совсем подходит такой способ так как у меня модель формируется из связанных между собой QStandartItem. Я приведу код ниже, чтобы показать как я строю модель. Модель строится у меня по таблице, которая имеет следующую структуру:
id,title,pid  где id - идентификатор записи, title - название группы, pid - идентификатор родителя.
Код
C++ (Qt)
QStandardItemModel* Groups::Get_tree_model(){
  /* if (_model->rowCount()!=0)
       return _model;*/

 
   QList<QHash<QString,QVariant> > list;
   _data->selectAll("Groups",&list);
   QStack<QStandardItem*> stack;
   // построим сначала все корневые вершины
   int count = list.count();
   for (register int i = 0; i<count; i++){
     QHash<QString,QVariant> record = list.at(i);
     if (record.value("pid").toInt() == 0){
         QStandardItem *itemTree = new QStandardItem();
         itemTree->setText(record.value("title").toString());
         itemTree->setData(record.value("ID").toInt());
         this->_model->appendRow(itemTree);
         stack.push(itemTree);
     }
   }
 
   /* алгоритм построения внутренних узлов дерева:
     1. Извлечь вершину из стека
     2. найти для этой вершины список её потомков
     3. присоеденить каждого найденного потомка к вершине
     4. положить в стек каждого найденного потомка
     5. пункт 1
*/

 
 
   while (!stack.isEmpty()){
 
       QStandardItem *itemTree = stack.pop();
 
       QList<QHash<QString,QVariant> > childList = this->FindInList(list,itemTree->data().toInt());
       //qDebug()<<itemTree->data().toInt()<<"data";
 
       int count = childList.count();
       //qDebug()<<childList;
       for (int i=0; i< count; i++){
           QHash<QString,QVariant> record = childList.at(i);
           QStandardItem *childTree = new QStandardItem();
           childTree->setText(record.value("title").toString());
           childTree->setData(record.value("ID").toInt());
           itemTree->setChild(i,childTree);
           stack.push(childTree);
       }
   }
 
     return this->_model;
}
Поэтому я и ищу способ у самих  QStandardItem добавить колонки.
Записан
Dr.Vlad
Гость
« Ответ #3 : Сентябрь 06, 2012, 20:31 »

Делаете вложенные циклы, при которых одна item_1 добавляется непосредственно в модель как ряд. А до этого item_1 заполняется рядом item_2. C колонками, по ходу дела, так же.

В treeView всё довольно гламурно после этого выглядит (я сам непосредственно так делал).
« Последнее редактирование: Сентябрь 06, 2012, 20:39 от Dr.Vlad » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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