Wie Sortieren Sie die Daten in QTableWidget?
Ich habe eine QTableWidget
und die erste Spalte enthält zahlen von 1 bis 1000. Jetzt brauche ich, um die Tabelle zu Sortieren auf der Grundlage der ersten Spalte.
Ich bin mit der Funktion sortItems(int column, Qt::AscendingOrder)
, aber es wird angezeigt als:
1, 10, 100, 1000, 101, 102, ...
Doch muss ich zu diesem Ergebnis:
1, 2, 3 ,4...., 1000.
Bin ich über eine CSV-Datei für das Auffüllen der Tabelle.
Das ist keine Frage. Es ist eine Nominalphrase mit einem Fragezeichen.
InformationsquelleAutor Shyam | 2011-10-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der einfachste Weg ist wohl zur Unterklasse QTableWidgetItem und implementieren Sie dann die < operator smart zu sein über die Tatsache, dass Sie die Sortierung von zahlen und nicht strings.
Dann, wenn Sie füllen Sie Ihre Tabelle, Sie kann es passieren, Instanzen der benutzerdefinierten Elemente, die wissen, wie man sich richtig anstatt den generischen Typen.
Vielen Dank, das funktioniert. In neueren Versionen von Qt, die Signatur hat sich geändert, etwas zu
bool operator< ( const QTableWidgetItem & other ) const
Im ernst, wenn
setData(Qt::DisplayRole, num)
nicht für Sie arbeiten, sollten Sie versuchen, diese.InformationsquelleAutor Chris
Die Werte sortiert sind als strings, da Sie gespeichert, Sie auch als solche in das Modell.
Den
QVariant
erinnern kann, die dem ursprünglichen Typ der Daten, wenn Sie lassen Sie es tun, die Konvertierung selbst, und der Vergleich-operator aus, der Typ wird verwendet, wenn-Sortierung:Den cell-editor wird auch die Anpassung an die Art der QVariant:
QSpinBox
fürint
,QDoubleSpinBox
fürdouble
undfloat
,QDateTimeEdit
fürQDateTime
warum nicht dies als die akzeptierte Antwort? Ich hatte Mühe mit diesem, da war ich mit ein long int, und komischerweise die QVariant arbeiten mit long long int oder int sein, aber nicht lang, int. Casting meine long int zu qlonglong für mich gearbeitet.
Dies sollte die akzeptierte Antwort, es ist viel einfacher als die andere!
InformationsquelleAutor alexisdm
Einer Weise, die gearbeitet, in meiner situation war
1) vor dem Befüllen der Tabelle, deaktivieren Sie die Sortierung:
2) pad die Anzahl der Zeichenfolgen mit Leerstellen und stellen Sie alle Zeichenfolgen in der Spalte haben die gleiche Länge:
3) nach dem Befüllen der Tabelle, wiederum auf-Sortierung:
Dieser fixiert die Zeile Sortierung problem in der numerischen Reihenfolge.
InformationsquelleAutor SoloPilot
Ich weiß nicht, ob die akzeptierte Antwort verwendet, um zu arbeiten, aber mit Qt5.1, gibt es nicht.
Um zu arbeiten, die
operator<
definition hat, um die virtuelle definition vonqtablewidget.h
.Eine weitere interessante Ergänzung ist zu Sortieren, die zahlen haben, aber beginnen mit einem Währungssymbol (
$
oder€
zum Beispiel) oder am Ende%
.Hier ist der aktualisierte code:
Dann fügen Sie die Elemente, die zahlen enthalten Sie so etwas wie dieses:
Beachten Sie, dass diese Klasse muss verwendet werden, mit nur zahlen, es wird nicht sortiert strings korrekt (wie auch der Fall mit die akzeptierte Antwort).
InformationsquelleAutor Sir Athos
Hatte ich dasselbe problem und Die Antwort von @Chris für mich gearbeitet!
aber eine kleine änderung nötig ist. Ich kann nicht kommentieren. also Schreibe ich hier.
text()
leer ist, danntext().toDouble()
gibt -1.0, wenn man vielleicht erwarten 0.0 statt. Sie sollten überprüfen, mit, dass bestimmte Nummer anstelle der änderung des Betreibers. Auchother.text()
könnte leer sein, auch wenn Sie erwarten, dasstext()
leer zu sein.Ich denke, leer Zelle leer ist und keine Notwendigkeit zu Sortieren. es funktioniert für mich für alle positiven Zahl 0.
InformationsquelleAutor M.Hu