Название: QStandartItem колонки
Отправлено: 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 ? Ведь вроде он это позволяет.
Название: Re: QStandartItem колонки
Отправлено: Dr.Vlad от Сентябрь 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 );
Название: Re: QStandartItem колонки
Отправлено: virtual_root от Сентябрь 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 добавить колонки.
Название: Re: QStandartItem колонки
Отправлено: Dr.Vlad от Сентябрь 06, 2012, 20:31
Делаете вложенные циклы, при которых одна item_1 добавляется непосредственно в модель как ряд. А до этого item_1 заполняется рядом item_2. C колонками, по ходу дела, так же.
В treeView всё довольно гламурно после этого выглядит (я сам непосредственно так делал).
|