我有 QTableWidget ,第一列填充了可检查的项目,所以我需要重载这些项目才能对它们进行排序:
class CheckBoxItem(QtGui.QTableWidgetItem):
def __init__(self, doSelect):
QtGui.QTableWidgetItem.__init__(self, doSelect)
self.setFlags(QtCore.Qt.ItemIsUserCheckable | QtCore.Qt.ItemIsEnabled)
if doSelect:
self.setCheckState(QtCore.Qt.Checked)
else:
self.setCheckState(QtCore.Qt.Unchecked)
def __lt__(self, other):
return self.checkState() < other.checkState()
当我单击该列的标题时,它按预期工作:行已排序 - 首先有选中的行,然后没有选中。
当我不单击任何列的标题然后使用时会出现问题tableWidget.setSortingEnabled(1)
,在这种情况下__lt__
,如果我有大约 15 行并随机混合一些行,而不是对它们进行排序,则会被调用 100 多次。我在打电话之前检查/取消检查了一些项目setSortingEnabled(1)
,但我不希望__lt__
比较它们,因为我没有单击该列的标题对它们进行排序。
我有 6 列(0-5),如果我没有单击其中任何一个的标题进行排序,则tableWidget.horizontalHeader().sortIndicatorSection()
返回6
- 这是表外的列,这意味着该表未排序。
那么,为什么__lt__
叫呢?我在覆盖它时错过了什么吗?我知道这可以解决问题(仅在单击该列的标题时才比较项目),但是如何传递sortIndicatorSection
给__lt__
?
def __lt__(self, other):
if sortIndicatorSection==0:
return self.checkState() < other.checkState()
请帮助我,我是菜鸟。