gpt4 book ai didi

qt - 正确跟踪源模型行移动是 QSortFilterProxyModel 契约(Contract)的一部分吗?

转载 作者:行者123 更新时间:2023-12-04 13:57:51 25 4
gpt4 key购买 nike

假设我有一个源模型,其中行运动用

beginMoveRows()
endMoveRows()
(因此发出 layoutChanged() )。
然后,有一个 QSortFilterProxyModel实例设置为过滤源模型的行。
当我从来源获得它时,源模型布局的变化导致代理模型的相应重新调整(因为它监听 layoutChanged() 信号并正确调整自身)。
但文档只说:

Note: By default, the model does not dynamically re-sort and re-filter data whenever the original model changes. This behavior can be changed by setting the dynamicSortFilter property.

dynamicSortFilter : boolThis property holds whether the proxy model is dynamically sorted and filtered whenever the contents of the source model change.


我的问题:
  • (1) 是否“每当原始模型更改时”包括“当行在原始模型内移动时”
  • (2) 如果是这样,代理模型中的项目顺序是否保证与源模型中的相同,以及
  • (3) 有没有人有过依赖上述行为开发的经验?
  • (4) [额外问题] 如果我尝试在 QSortFilterProxyModel 子类中跟踪源模型的行(AboutToBe)Moved 信号并在那里调用 beginMoveRows/endMoveRows(使用适当映射的行索引),我是否正确理解,这会弄乱代理,因为 beginMoveRows/endMoveRows 调用将尝试在处理 onLayoutChanged 源模型的信号时,调整已由 QSortFilterProxyModel 调整的持久索引?

  • 谢谢。

    最佳答案

    您在评论中提到的问题似乎只有在您使用列的数量或排序时才会出现,因此我认为您的模型不受影响。

    没有提供关于打算发生什么的详细规范,所以唯一的选择是查找源代码并希望它在 future 的版本中不会发生变化。在浏览了来源后,我认为您的问题的答案是:

  • (1) 是的,qt 正在响应 layoutChanged()layoutAboutToBeChanged()信号,更新它的索引并发出自己的 layoutChanged()layoutAboutToBeChanged() ,所以它对行移动使用react。
  • (2) 是的,如果您不使用排序,只需过滤。在这种情况下,Qt 会删除整个内部映射并从头开始重新构建它,因此数据将与它们在源模型中显示的一样。排序当然会散布新数据。请注意,如果您在同一父级中使用排序和移动行,排序模型不应显示任何更改。
  • (3) 不。我只是在阅读qt 源代码和解释。您可以随意忽略所提供的任何信息;)
  • (4) 是的,layoutChanged()已经在更新持久索引,所以再次更新它只会把事情搞砸。
  • 关于qt - 正确跟踪源模型行移动是 QSortFilterProxyModel 契约(Contract)的一部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12130788/

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