调用setSortingEnabled(1)时出现意外行为

时间:2013-07-11 10:14:30

标签: python qt pyqt qtablewidget

我有一个QTableWidget第一列填充了可检查的项目,因此我需要重载这些项目才能对它们进行排序。当我点击该列的标题时排序按预期工作(行已排序 - 首先是已检查的行,然后未检查)。

当我运行我的GUI并且没有点击任何列的标题来排序表然后执行此操作时,会出现问题:

tableWidget.setSortingEnabled(0); 
// check/uncheck some checkable items here
tableWidget.setSortingEnabled(1);

在那种情况下,被覆盖的__lt__被称为100次以上,但我没想到,因为我没有点击该列的标题进行排序。那么,为什么要调用__lt__?为什么它比较了一些可检查的项目,即使我没有点击该列的标题来对它们进行排序?

请帮助我,当我有30多行时,拨打__lt__会消耗太多时间。

1 个答案:

答案 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

     

返回排序指标的顺序。如果没有任何部分   指示器此函数的返回值为未定义

所以你应该小心这个