递归函数不会过早退出

  • 本文关键字:退出 递归函数 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;
}

即使满足条件,该函数仍会运行。

代码中的问题是,即使递归函数调用返回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;
}
[..]

相关内容

  • 没有找到相关文章

最新更新