Да, я столкнулся с этим много. Я всегда думал, что теоретически делать что-то вроде:
item = QTreeWidgetItem()
item.setData(0, Qt.EditRole, QVariant(1024))
item.setData(0, Qt.DisplayRole, '1 Kb')
ДОЛЖЕН работать ... к сожалению, это не так. Единственный реальный способ получить его работы является подкласс QTreeWidgetItem и либо хранить информацию сортировки по-своему, или использовать Qt.UserRole против EditRole или DisplayRole:
class MyTreeWidgetItem(QTreeWidgetItem):
def __lt__(self, other):
if (not isinstance(other, MyTreeWidgetItem)):
return super(MyTreeWidgetItem, self).__lt__(other)
tree = self.treeWidget()
if (not tree):
column = 0
else:
column = tree.sortColumn()
return self.sortData(column) < other.sortData(column)
def __init__(self, *args):
super(MyTreeWidgetItem, self).__init__(*args)
self._sortData = {}
def sortData(self, column):
return self._sortData.get(column, self.text(column))
def setSortData(self, column, data):
self._sortData[column] = data
Так, используя его в этом случай будет аналогичен предыдущему, но на самом деле разрешает сортировку по пользовательским данным:
item = MyTreeWidgetItem()
item.setSortData(0, 1024)
item.setText(0, '1 kb')01
awesome ... это сработало, спасибо! – mfessenden