ksm*_*ing 6 c++ qt model qtreeview
我有一个从 QAbstractItemModel 派生的工作树模型,我希望使用 QSortFilterProxyModel 子类对其进行过滤,以仅显示某些条件的子节点。例如,我有以下树:
A
- B
-- C1
-- C1
-- C1
--- C2
- D
- E
Run Code Online (Sandbox Code Playgroud)
我想以节点具有 name == C1 的条件过滤这棵树,并仅显示具有 C1 的节点及其子节点,如下所示:
C1
C1
C1
- C2
Run Code Online (Sandbox Code Playgroud)
我已经有一个重新实现了 filterAcceptsRow() 的子类,它可以部分执行我想要的操作,但它仍然会显示 C1 节点的父节点和祖父节点:
A
- B
-- C1
-- C1
-- C1
--- C2
Run Code Online (Sandbox Code Playgroud)
我认为这是因为要考虑子节点,他们的父节点必须通过 filterAcceptsRow() 测试,对吗?我如何实现 filterAcceptRows() 或其他方法,以便它可以执行我所描述的操作?
我曾经在 qtcentre 和 qtforum 中问过这个问题,但没有得到任何有用的答复。我尝试在 filterAcceptsRow() 中直接使用 beginMoveRows 和 endMoveRows 移动 QSortFilterProxyModel 子类的索引,但由于危险的 const_cast 导致测试应用程序崩溃。
好的,我找到了解决我的问题的方法。只需使用 QTreeView::setRootIndex() 和索引 B 作为输入参数。索引 B 成为 QTreeView 的根索引,它是隐藏的,只有它的子项完整显示。
找到这个解决方案后,我感到非常愚蠢。猜猜我太专注于使用代理模型来修改数据的呈现方式,我完全忘记了 QTreeView。
| 归档时间: |
|
| 查看次数: |
5513 次 |
| 最近记录: |