QAbstractItemModel :: match()不会搜索整个模型

时间:2018-07-08 19:07:41

标签: c++ qt qabstractitemmodel

Qt documentation指出,使用设置了QAbstractItemModel::match()Qt::MatchRecursive标志的Qt::MatchWrap进行搜索将遍历“整个层次结构”和“当搜索到达末尾的最后一项时模型,它会从第一个项目再次开始,一直持续到检查完所有项目为止。”

但是,在我的示例中,情况并非如此。 match()仅搜索start索引的子项/兄弟项。

我正在尝试实现一个简单的“下一个”和“上一个”搜索功能,以在QTreeView中搜索文本。但是由于match()不会搜索父项/上级项,因此退出为时过早。

这是我的“下一个”功能:

QModelIndex searchStartIndex;
if(!treeView->currentIndex().isValid())
    searchStartIndex = treeView->model()->index(0,0);//root item
else
    searchStartIndex = treeView->currentIndex();

QModelIndexList nextMatches = treeView->model()->match(searchStartIndex, Qt::DisplayRole, lineEdit->text(), 1, Qt::MatchContains | Qt::MatchWrap | Qt::MatchRecursive);

if(nextMatches.size() == 1)
{
    //first result might be the currently selected item
    if(nextMatches.at(0) == treeView->currentIndex())
    {
        nextMatches = treeView->model()->match(searchStartIndex, Qt::DisplayRole, lineEdit->text(), 2, Qt::MatchContains | Qt::MatchWrap | Qt::MatchRecursive);

        if(nextMatches.size() == 2)
        {
            treeView->setCurrentIndex(nextMatches.at(1));
        }
    }
    else
        treeView->setCurrentIndex(nextMatches.at(0));
}

我不明白为什么文档会说一件事,但是行为却有所不同。

0 个答案:

没有答案