QtreeWidget 열에서 숫자를 정렬 할 수 있습니까?
-
21-08-2019 - |
문제
숫자로 채워진 열이있는 QtreeWidget이 있는데 어떻게 정렬 할 수 있습니까?
setSortingEnabled (true)를 사용하는 경우; 문자열 만 올바르게 정렬 할 수 있으므로 열이 정렬됩니다.
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();
}
};
이 예에서는 소문자 모드에서 필드를 직면하는 실제 사례를 무시합니다.
다른 팁
다음은 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()
내가 찾은 가장 좋은 방법은 시도 블록을 사용하여 숫자를 찾는 것입니다.
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"
).
보다 구체적으로, 문자열은 문자를 왼쪽에서 오른쪽으로 문자별로 비교하여 하나 또는 다른 문자가 다를 때까지,이 시점에서 비교가 중지됩니다. 예를 들어, 19
그리고 121
다음과 같이 비교됩니다.
"19"[0] != "121"[0] ? // no
"19"[1] != "121"[1] ? // yes
'9' > '2' ? // yes
return some value that indicates "19" greater than "121";
올바르게 정렬하려면 숫자 값으로 변환 한 다음 정렬해야합니다. 그 외에는 숫자를 올바른 방법으로 읽는 고유 한 정렬 알고리즘을 구현할 수 있습니다.
제휴하지 않습니다 StackOverflow