5

我有自定义分层模型,继承自 QAbstractModelItem。另外,我实现了从 QSortFilterProxyModel 子类化的 MySortFilterProxyModel。MySortFilterProxyModel 可以删除和交换列。如果 MySortFilterProxyModel 中的第一列对应于模型中的第一列,则一切正常。但是如果在代理模型中交换它,视图会出现一些问题: 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这是问题吗?

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

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

4

1 回答 1

4

Try using the Qt Model Tester to get more information.

This will fail with an assertion if something is wrong with the models. When an assertion fails, look in the model test code at the comment above that assertion to find out what went wrong.

Make sure you attach a model tester to the proxy model and the source model, otherwise an error in the source model may cause a proxy to fail.

于 2011-12-08T20:45:53.927 回答