Спасибо, я пробовала уже так: 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 добавить колонки.