質問

私はいくつかの数字を充填したカラムでQTreeWidgetを持って、どのように私はそれらを並べ替えることができますか?

私はsetSortingEnabled(true)を使用している場合は、私は正しくソート文字列のみが、ので、私の列がソートされることができます:

1    10    100    2    20    200

これは私が望むものではありません! 提案?

役に立ちましたか?

解決

あなたは<演算子をオーバーライドして、このようにソートcondictionを変更並べ替えることができます。

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