从平面QStandardItemModel构建树

时间:2015-07-04 11:42:34

标签: c++ qt recursion

我对QStandardItemModel有疑问。我想从一个模型(id,name,parent)获取值,并在另一个模型中构建树。

首先,让所有父母的所有孩子都到QMultiMap<int,QStandardItem*> childrenIndexes

getChildrens()
{
    for(int i = 0 ; i < tableModel->rowCount() ; i++ )
    {

        QStandardItem* item_ptr = tableModel->item(i,1);
        int parent;
        if(tableModel->item(i,2)->text() == "null")
        {
            parent = -1;
        }
        else
        {
            parent = tableModel->item(i,2)->text().toInt();
        }

        childrenIndexes.insert(parent, item_ptr);
    }
}

Multimap构建正常,下一步我递归调用构建函数。从root开始(第1项):

void addChildrens(QStandardItem* item)
{
    int id = tableModel->item(tableModel->indexFromItem(item).row(),0)->text().toInt();
QString name = tableModel->item(tableModel->indexFromItem(item).row(),1)->text();
qDebug() << "Parsing item: " << name;
int parent;

if(tableModel->item(tableModel->indexFromItem(item).row(),2)->text() == "null")
{
    qDebug() << "Got root!";
    item = new QStandardItem(name);
    treeModel->appendRow(item);
    parent = -1;
}
else
{
    parent = tableModel->item(tableModel->indexFromItem(item).row(),2)->text().toInt();
}
qDebug("Got %d childrens!",childrenIndexes.values(id).count());
for(int i = 0 ; i < childrenIndexes.values(id).count() ; i++)
{
    QStandardItem* newItem = childrenIndexes.values(id).at(i);
    qDebug() << newItem->text();
    item->appendRow(newItem->clone());
    addChildrens(newItem);
}
}

不幸的是,我的树只有根的孩子。哪里有问题?

enter image description here

0 个答案:

没有答案