我有一个第一列填充了可检查项的QTableWidget,因此我需要重载这些项才能对它们进行排序。当我点击该列的标题时,排序就像预期的那样工作(行被排序-首先有选中的行,然后不选中)。
当我运行GUI时,如果没有单击任何列的标题来对表进行排序,然后执行以下操作,则会出现问题:
tableWidget.setSortingEnabled(0);
// check/uncheck some checkable items here
tableWidget.setSortingEnabled(1);在这种情况下,被覆盖的__lt__被称为100+次,但我并不期望出现这种情况,因为我没有单击要排序的列的标题。那么,为什么要调用__lt__呢?为什么它会比较一些可检查的项目,即使我没有单击该列的标题来对它们进行排序?
请帮帮我,当我有30+行的时候,调用__lt__会消耗太多的时间。
发布于 2013-07-11 19:39:04
来自文档(C++ qt,但适用):
sortingEnabled :布尔图
此属性保存是否启用排序。
如果此属性为true,则对表启用排序。如果此属性为false,则不启用排序。默认值为false。
注:。使用setSortingEnabled()将属性设置为true会立即触发对sortByColumn()的调用,其中包含当前的排序部分和顺序。
如果您查看QHeaderView的文档(小部件查询它以了解排序依据的列),您可以阅读:
int QHeaderView::sortIndicatorSection () const
返回具有排序指示符的节的逻辑索引。默认情况下,这是第0节。
另请参阅setSortIndicator()、sortIndicatorOrder()和setSortIndicatorShown()。
和:
Qt::SortOrder QHeaderView::sortIndicatorOrder () const
返回排序指示符的顺序。如果没有带排序指示符的节,则此函数的返回值为未定义的。
所以你应该小心这一点
https://stackoverflow.com/questions/17590754
复制相似问题