0

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

当我运行我的 GUI 并且不单击任何列的标题对表进行排序然后执行以下操作时,就会出现问题:

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

在那种情况下,覆盖__lt__被调用了 100 多次,但我没想到会这样,因为我没有单击该列的标题进行排序。那么,为什么__lt__叫呢?为什么即使我没有单击该列的标题对它们进行排序,它也会比较一些可检查的项目?

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

4

1 回答 1

5

来自文档(C++ qt 但适用):

排序启用:布尔

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

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

笔记:。使用 setSortingEnabled() 将该属性设置为 true 会立即触发对带有当前排序部分和顺序的 sortByColumn() 的调用。

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

int QHeaderView::sortIndicatorSection () 常量

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

另请参见 setSortIndicator()、sortIndicatorOrder() 和 setSortIndicatorShown()。

和:

Qt::SortOrder QHeaderView::sortIndicatorOrder () 常量

返回排序指示器的顺序。如果没有部分具有排序指示符,则此函数的返回值为undefined

所以你应该小心这个

于 2013-07-11T11:39:03.747 回答