我有自定义的分层模型,继承自 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/