qt - 设置交换列的代理模型时自定义分层模型的 View 不正确

标签 qt model proxy-classes qabstractitemmodel

我有自定义的分层模型,继承自 QAbstractModelItem。此外,我实现了从 QSortFilterProxyModel 子类化的 MySortFilterProxyModel。 MySortFilterProxyModel 可以删除和交换列。如果 MySortFilterProxyModel 中的第一列对应于模型中的第一列,则一切正常。但是,如果它在代理模型中交换,则 View 会出现一些问题:MySortFilterProxyModel::hasChildren 工作正常,因此在顶层,我在具有子项的元素附近有“+”。但是当我尝试展开它时 - 没有显示子项。
以下是一些 MySortFilterProxyModel 方法:

    bool MySortFilterProxyModel::hasChildren(const QModelIndex &parent) const
    {
        if (parent.isValid() && parent.column() != 0)
            return false;
        QModelIndex source_parent = mapToSource(parent);
        return  sourceModel()->hasChildren( source_parent.sibling(source_parent.row(), 0) );
    }


    int MySortFilterProxyModel::rowCount(const QModelIndex &parent) const
    {
         if (parent.isValid() && parent.column() != 0)
            return 0;

        QModelIndex source_parent = mapToSource(parent);
        return sourceModel()->rowCount( source_parent.sibling(source_parent.row(), 0) );
    } 

在调试期间,我发现 MySortFilterProxyModel::rowCount 返回正确的数据。但我也注意到 MyModel::rowCount 不是通过 MySortFilterProxyModel::rowCount 调用的,而是从 QSortFilterProxyModel::index() 调用的。 Peharps 这是问题吗?

所以特定的问题是实现代理模型以交换和关闭分层模型中的列的正确方法是什么?

请帮我解决问题。谢谢你。

最佳答案

尝试使用 Qt Model Tester以获取更多信息。

如果模型有问题,这将因断言而失败。当断言失败时,请查看模型测试代码中该断言上方的注释以找出问题所在。

确保将模型测试器附加到代理模型和源模型,否则源模型中的错误可能会导致代理失败。

关于qt - 设置交换列的代理模型时自定义分层模型的 View 不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8267730/

相关文章:

regex - 如何限制 QLineEdit 中的表达式

c++ - 为什么推荐的 QDialog 实例化是这样的?

java - 如何使用调试日志信息动态生成堆栈帧

qt - 如何设置精度和对齐方式以在 QTableView 中显示数值

qt - 我有一个 ListView,可以在其中添加和删除 ListElements。当我删除 ListElement(行)时,有没有办法为下部项目的移动设置动画?

python - 如何在 Django 中的产品过滤功能中获取公司名称?

go:暴露的别名结构无法分配给内部结构文字

c++ - 如何子类化 QStandardItemModel 以使用我自己的 Item 类型?

java - 无法使用具有代理支持的 httpclient 上传文件