QSortFilterProxyModel:源模型报告的不一致更改

时间:2019-03-21 12:32:46

标签: qt qt4 qabstractitemmodel qsortfilterproxymodel

因此,我有一个QTreeView小部件,其中有一个自定义QSortFilterProxyModel作为源模型,它本身包装了一个名为sourceModel的自定义QAbstractItemModel。

我的树显示文件和文件夹。如果删除文件使文件夹为空,则该文件夹将被自动删除。实现如下:

bool sourceModel::removeRows(int row, int count, const QModelIndex& parent)
{
    if (parent.isValid())
    {
        auto parent_node = static_cast<Node*>(parent.internalPointer());
        if (!parent.data(rootNode).toBool())
        {
            beginRemoveRows(parent, row, row + count - 1);
            for (int i = 0; i < count; ++i)
                parent_node->removeChild(row + i);
            endRemoveRows();

            if (parent_node->isType<Folder>() && parent_node->children() == 0)
            {
                removeRows(parent_node->row(), 1, parent.parent());
            }
            return true;
        }
    }
}

当通过代理模型调用removeRows时,这很好用,但是在另一个实例中,当sourceModel直接调用removeRows时,我得到:

  

QSortFilterProxyModel:源模型报告的不一致更改

好像QSortFilterProxyModel没有正确接收或处理beginRemoveRows / endRemoveRows。

1 个答案:

答案 0 :(得分:1)

我已经解决了这个问题,该修复程序与模型本身无关,并且所发布的代码运行正常。我直接从上下文菜单工作流中调用了一个方法,这导致了代理模型和选择模型之间的某种竞争状况。