【问题标题】:How to sort TreeView Items using QSortFilterProxyModel based on Combobox Selection如何使用基于组合框选择的 QSortFilterProxyModel 对 TreeView 项进行排序
【发布时间】:2016-10-21 15:17:49
【问题描述】:

我的应用中有一个 TreeView。我使用从 QSortFilterProxyModel 继承的类来限制显示的行。我还需要根据组合框的 selectedIndex 对 TreeView 中的项目进行排序。 到目前为止我所做的是:

  1. 当组合框的选中索引发生变化时,我会调用继承自QSortFilterProxyModel的类中的一个函数,该函数调用sort(0)函数。
  2. 在继承自 QSortFilterProxyModel 的类中,我重写了 lessThan 函数并根据 ComboBox 中的当前选择实现了我的逻辑

问题是,排序并不总是发生。当我运行应用程序并在组合框中选择一个项目时,树项目会正确排序。但是如果我在组合框中选择另一个项目,树将不会得到更新。不过,lessThan 函数会被调用!

【问题讨论】:

  • 您需要提供您正在使用的代码,您提供的信息不足以得出问题的结论。
  • @Mike 我相信我提供的信息对于知道答案的人来说已经足够了。如您所见,Kevin 理解并回答了问题。

标签: qt treeview qml qtquick2 qsortfilterproxymodel


【解决方案1】:

如果您的代理设置为动态排序/过滤器(很可能是这样),那么再次使用相同的列和排序方向调用 sort() 将不会执行任何操作。 见https://code.woboq.org/qt5/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp.html#_ZN21QSortFilterProxyModel4sortEiN2Qt9SortOrderE

您还/或者必须致电QSortFilterProxyModel::invalidate() 来触发求助。

【讨论】:

  • 谢谢,在我的情况下,两个操作都需要排序才能正常工作。 setDynamicSortFilter(false) 创建 QSortFilterProxyModel 类的实例,并在调用 sort(0) 之前调用 invalidate()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
相关资源
最近更新 更多