我有一个从 QAbstractItemModel 派生的工作树模型,我希望使用 QSortFilterProxyModel 子类对其进行过滤,以仅显示某些条件的子节点。例如,我有以下树:
A
- B
-- C1
-- C1
-- C1
--- C2
- D
- E
我想过滤这棵树,条件是节点的名称 == C1,并且只显示具有 C1 的节点及其子节点,如下所示:
C1
C1
C1
- C2
我已经有一个重新实现了 filterAcceptsRow() 的子类,它可以部分做我想要的,但它仍然会显示 C1 节点的父节点和祖父节点:
A
- B
-- C1
-- C1
-- C1
--- C2
我认为这是因为要考虑子节点,他们的父节点必须通过 filterAcceptsRow() 测试,对吗?我怎样才能实现 filterAcceptRows() 或其他方法,以便它可以做我所描述的?
我曾经在 qtcentre 和 qtforum 上问过这个问题,但没有得到任何有用的答复。我尝试使用 filterAcceptsRow() 中的 beginMoveRows 和 endMoveRows 直接移动 QSortFilterProxyModel 子类的索引,但这只是由于危险的 const_cast 而导致测试应用程序崩溃。