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

Ale*_*dar 0 python qt pyqt qtablewidget

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

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

tableWidget.setSortingEnabled(0); 
// check/uncheck some checkable items here
tableWidget.setSortingEnabled(1);
Run Code Online (Sandbox Code Playgroud)

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

请帮助我,__lt__当我有30多行时,调用消耗太多时间.

tro*_*mpa 5

来自docs(C++ qt但适用):

sortingEnabled:bool

此属性保存是否启用排序.

如果此属性为true,则为表启用排序.如果此属性为false,则不启用排序.默认值为false.

注意:.使用setSortingEnabled()将该属性设置为true会立即触发使用当前排序部分和顺序调用sortByColumn().

如果您检查QHeaderView的文档(由窗口小部件查询以了解要排序的列),您可以阅读:

int QHeaderView :: sortIndicatorSection()const

返回具有排序指示符的节的逻辑索引.默认情况下,这是第0部分.

另请参见setSortIndicator(),sortIndicatorOrder()和setSortIndicatorShown().

和:

Qt :: SortOrder QHeaderView :: sortIndicatorOrder()const

返回排序指示符的顺序.如果没有部分具有排序指示符,则此函数的返回值未定义.

所以你应该小心这一点