是否可以在QTreeWidget列中sorting数字?

我有一个填充了一些数字的QTreeWidget,我怎么能sorting他们?

如果我使用setSortingEnabled(true); 我只能正确sortingstring,所以我的列sorting:

1 10 100 2 20 200

但这不是我想要的! build议?

Solutions Collecting From Web of "是否可以在QTreeWidget列中sorting数字?"

你可以重写<运算符,改变排序条件。

class TreeWidgetItem : public QTreeWidgetItem { public: TreeWidgetItem(QTreeWidget* parent):QTreeWidgetItem(parent){} private: bool operator<(const QTreeWidgetItem &other)const { int column = treeWidget()->sortColumn(); return text(column).toLower() < other.text(column).toLower(); } }; 

在这个例子中,它忽略了真实的情况,在小写模式下面对字段。

这是一个pyQt实现使用__lt__

 class TreeWidgetItem(QtGui.QTreeWidgetItem): def __init__(self, parent=None): QtGui.QTreeWidgetItem.__init__(self, parent) def __lt__(self, otherItem): column = self.treeWidget().sortColumn() return self.text(column).toLower() < otherItem.text(column).toLower() 

我发现最好的方法是使用try块来查找数字

 class TreeWidgetItem( QtGui.QTreeWidgetItem ): def __init__(self, parent=None): QtGui.QTreeWidgetItem.__init__(self, parent) def __lt__(self, otherItem): column = self.treeWidget().sortColumn() try: return float( self.text(column) ) > float( otherItem.text(column) ) except ValueError: return self.text(column) > otherItem.text(column) 

数字按数值排序,但字符串按相反的方式排序(即"19999" < "2" )。

更具体地说,字符串从左到右按字符进行比较,直到一个字符或其他字符不同,此时比较停止。 比如19121就会这样比较:

 "19"[0] != "121"[0] ? // no "19"[1] != "121"[1] ? // yes '9' > '2' ? // yes return some value that indicates "19" greater than "121"; 

要正确排序,您需要将它们转换为数值,然后对它们进行排序。 除此之外,您可以实现自己的排序算法,以正确的方式读取数字。