如何使用带有 Qabstractitemmodel 的 QSortFilterProxyModel 隐藏第一列

如何解决如何使用带有 Qabstractitemmodel 的 QSortFilterProxyModel 隐藏第一列

在我的小部件实现中,model 源模型(从 qabstractitemmodel 派生),proxy_model(从 QSortFilterProxyModel 派生)代理,以及 tree(QTreeView)代表模型的树。

我想隐藏第一列。 我尝试使用 tree.hideColumn(0),树显示为平面。

  • 如果我在代理中子类化 filteracceptsColumn 以仅对第二列返回 True,则不会显示任何行。 我相信这是因为父/子关系锚定在索引的第一列上,并且当代理请求列 1 的给定索引的行数时,模型返回 0(这是如果我理解得很好,模型实现)。
  • 如果我将 rowCount 设置为在模型中为列索引 > 0 返回非 0 值,我可以看到树和行,但是模型没有通过 qabstractitemmodelTester 测试以下错误
qt.modeltest: FAIL! childindex != childindex1 () returned FALSE

我很清楚在树模型中,子索引必须附加到单个父索引(第一列)。 但是,如果源模型的父子关系没有被代理保留,如果第一列被过滤,我应该如何隐藏代理模型中的第一列?我觉得这是代理的“错误”,或者我错过了什么!

有没有人知道在不丢失父/子信息的情况下过滤/隐藏树视图中第一列的正确方法,并且仍然验证 qmodel 实现?

谢谢!

解决方法

正确且正确的实现至少需要代理为 second 列的父列创建索引,需要正确实现 index()parent()、{{ 1}} 和 mapToSource()。对于可能非常棘手的树模型。

如果源模型不太复杂并且其所有功能都正确实现,则可能的解决方法是仅覆盖代理的 mapFromSource()(和 data())并始终返回下一列。

以下测试是使用简单的 QStandardItemModel 完成的,但我认为使用 QAbstractItemModel 应该没有任何不同,只要它正确实现即可。

headerData

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?