Да, я часто сталкивался с этим. Я всегда думал, что теоретически делаю что-то вроде:
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
person
Eric Hulser
schedule
01.08.2012