QSortFilterProxymodel:源模型报告的不一致的变化



所以我有一个Qtreeview小部件,该小部件的QSortFilterProxymodel作为源模型,该模型本身包装了一个自定义的QABStractItemModel,称为:sourceModel

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

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;
        }
    }
}

通过代理模型调用洗涤器时,这很好,但是在另一种实例中,当SourceModel调用重新拨动器直接调用时,我得到:

qsortfilterproxymodel:源模型报告的不一致的变化

好像QSortFilterProxymodel未接收或处理beginRemoverows/endRemoverows。

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

相关内容

  • 没有找到相关文章

最新更新