递归函数不会过早退出

时间:2019-09-06 10:14:41

标签: qt qt5

我有一个递归函数,可以从树视图的名称中找到一个树项。

bool SumCommandInterface::getTreeItem(const std::string &stdstrName, const QModelIndex & index, TreeModel *model, TreeItem** item)
{
    if (index.isValid())
    {
        TreeItem* currentTreeItem = model->getItem(index);
        if (currentTreeItem->getName() == stdstrName)
        {
            *item = currentTreeItem;
            return true;            
        }
    }

    if(!model->hasChildren(index) || (index.flags() & Qt::ItemNeverHasChildren))
    {
        return false;
    }


    auto rows = model->rowCount(index);
    for (int i = 0; i < rows; ++i)
        getTreeItem(stdstrName , model->index(i, 0, index), model , item );

    return false;
}

即使满足条件,该功能仍然可以运行。

1 个答案:

答案 0 :(得分:3)

代码中的问题是,即使递归函数调用返回了true,即满足条件,也不会从函数返回。实施递归调用的正确方法是:

[..]
for (int i = 0; i < rows; ++i)
    // Return if the condition is met.
    if (getTreeItem(stdstrName , model->index(i, 0, index), model, item)) {
        return true;
    }
[..]