我有一个QTableWidget
第一列填充了可检查的项目,因此我需要重载这些项目才能对它们进行排序。当我点击该列的标题时排序按预期工作(行已排序 - 首先是已检查的行,然后未检查)。
当我运行我的GUI并且没有点击任何列的标题来排序表然后执行此操作时,会出现问题:
tableWidget.setSortingEnabled(0);
// check/uncheck some checkable items here
tableWidget.setSortingEnabled(1);
在那种情况下,被覆盖的__lt__
被称为100次以上,但我没想到,因为我没有点击该列的标题进行排序。那么,为什么要调用__lt__
?为什么它比较了一些可检查的项目,即使我没有点击该列的标题来对它们进行排序?
请帮助我,当我有30多行时,拨打__lt__
会消耗太多时间。
答案 0 :(得分:5)
来自docs(C ++ qt但适用):
sortingEnabled:bool
此属性保存是否启用排序。
如果此属性为true,则为表启用排序。如果这 property为false,未启用排序。默认值为false。
请注意:。 使用setSortingEnabled()将属性设置为true 立即使用当前排序触发对sortByColumn()的调用 部分和顺序。
如果您检查QHeaderView的文档(由窗口小部件查询以了解要排序的列),您可以阅读:
int QHeaderView :: sortIndicatorSection()const
返回具有排序指示符的节的逻辑索引。通过 默认为第0部分。
另请参见setSortIndicator(),sortIndicatorOrder()和 setSortIndicatorShown()。
和
Qt :: SortOrder QHeaderView :: sortIndicatorOrder()const
返回排序指标的顺序。如果没有任何部分 指示器此函数的返回值为未定义。
所以你应该小心这个