0
|
wayfarer · 技术社区 · 2 年前 |
![]() |
1
0
这个问题是由递归搜索本身引起的。 这种搜索确保 任何 在其子树中至少有一个匹配项的顶级项。 现在,虽然这种方法通常适用于树视图中显示的标准搜索,但在处理将非 模型 根 在您的情况下,您可以看到C:驱动器,因为搜索算法在 整体 文件系统,特别是在C:驱动器中。 同时,您正试图基于D:设置根索引,但该搜索在该树节点内不返回任何结果,而且由于返回的索引实际上是无效的,因此它将重置根索引:请记住,无效的QModelIndex总是指模型的根。因为,在这一点上,过滤器显示 某物 在C中:匹配搜索,这就是您可以看到的。 如果你有另一个驱动器,其中有一个包含“x”的文件或文件夹,你可能也会看到那个驱动器。 QSortFilterProxyModel不允许设置递归筛选器的“深度”,并且还需要搜索筛选器才能显示视图的根索引(这不是顶级项)。
我能建议的唯一解决方案是始终检查映射索引的有效性:如果它有效,则继续
然后,每当搜索发生更改时,您都需要再次恢复它。
另一种可能性是不直接在视图中使用排序筛选器,而是创建一个独立的QStandardItemModel,并在代理更改其筛选器时始终通过迭代父级的映射源索引来重新填充它:如果父级有效,请尝试附加其子级。 |
![]() |
bairog · 从按属性筛选的对象数组字典中创建值数组 4 月前 |
![]() |
D_chez12 · 如果对象键值为空,则过滤掉数组中的对象 6 月前 |
![]() |
DN98024 · 如何在R中过滤掉其他所有内容的同时保持值的首次出现? 11 月前 |
![]() |
ForEverNewbie · 筛选时间段在另一行时间段内的行 1 年前 |