我有一个QTreeWidget充满了一些数字的专栏中,我怎么能对它们进行排序?

如果我使用setSortingEnabled(真);我可以排序正确只是字符串,所以我的列进行排序:

1    10    100    2    20    200

但是这不是我想要的东西! 建议?

有帮助吗?

解决方案

可以排序重写<操作者和改变排序条件是这样的。

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();
  }
};

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

其他提示

下面是一个使用一个__lt__ PyQt的实施

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";

要正确地对它们进行排序,你需要将其转换为数值,然后对其进行排序。除此之外,你可以实现自己的排序算法,上面写着数字的正确方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top