Qt: die Sortierung ist falsch, wenn mit QSortFilterProxyModel auf Anzahl Saiten und immer falschen Spalte text
habe ich einfache model view treeview mit QSortFilterProxyModel-proxy, um die Spalten Sortieren und QStandardItemModel wie das Modell
in den einzelnen Spalten gibt es string, wird sortiert, in Ordnung, aber in den Spalten, die enthält eine Zahl ( als String ) die Sortierung falsch .
sagen, ich habe 9,12,1 (jede Zahl in der anderen Spalte, wenn ich Sie sortiert sich im 1,12,9 oder 12,1,9 aber nie in der richtigen Reihenfolge .
wie 1,9,12 oder 12,9,1 warum ?
auch ich merke, dass wenn ich in der Zeile Sortieren der Spalte , wenn ich versuche, um die neue Spalte text mit m_model->item(iSelectedRow,0)->text();
ich bin immer die erste Spalte text, aber nie die neue sortierte Spalte text. warum ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist, weil standardmäßig, QSortFilterProxyModel Arten von DisplayRole. Wenn, die eine Zeichenfolge zurückgibt, wird die Sortierung der Zeichenfolge.
Um das Modell zu Sortieren, indem Sie einen anderen Wert definieren Sie eine benutzerdefinierte Sortierung Rolle in der Quelle Modell, und legen Sie es auf dem proxy:
Ihre zweite Frage: Was ist m_model? Der source-Modell, oder die sortfilterproxymodel? Das erstere ist nie geändert werden, indem die Sortierung, die Sortierung geschieht nur in der proxy.
Wenn man die Saiten "9", "12" und "1" erhalten Sie "1", "12", "9" (lexikographische Sortierung). Wenn Sie wollen, dass Sie sortiert als zahlen, müssen Sie eine Unterklasse der QSortFilterProxyModel und lessThan implementieren Sie die member-Funktion, wo Sie konnte einfach QString::toInt().
Kann man alles herausfinden, indem man den exzellenten Qt-Dokumentation, wo finden Sie auch Informationen über mapToSource(), mapFromSource(), mapSelectionToSource(), und mapSelectionFromSource() zu konvertieren, Quelle QModelIndexes zu sortierten/gefilterten Modell-Indizes oder Umgekehrt.
verwenden QStandardItem::setData() beim Befüllen deiner Tabelle wie unten dargestellt. Dann alles wie erwartet funktionieren wird.
folgenden Zeilen von Qt Dokumentation
Hier ist die einfache Nutzung von Daten festlegen.