gpt4 book ai didi

c++ - 如何使用 QSortFilterProxyModel 过滤只显示子节点及其父节点的树模型?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:48:12 36 4
gpt4 key购买 nike

我有一个从 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 而导致测试应用程序崩溃。

最佳答案

好的,我找到了解决问题的方法。只需使用带有索引 B 的 QTreeView::setRootIndex() 作为输入参数。索引 B 成为 QTreeView 的根索引,它是隐藏的,只有它的子项才会完整显示。

找到这个解决方案后,我真的很傻。我猜我太专注于使用代理模型来修改数据的呈现方式,我完全忘记了 QTreeView。

关于c++ - 如何使用 QSortFilterProxyModel 过滤只显示子节点及其父节点的树模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7563512/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com