2009-04-25 8 views
3

Ich habe ein QTreeWidget, in das ich Elemente einfüge, und der Benutzer kann eine Spalte auswählen, um es zu sortieren. Wenn die Elemente eingefügt werden, werden sie nur an das Ende angehängt, anstatt dass die Sortierung automatisch erfolgt. Wenn ich auf die Kopfzeile klicke, um zwischen aufsteigend und absteigend zu wechseln, werden die aktuellen Elemente sortiert.Automatisches Sortieren nach Einfügen in QTreeWidget

Ich dachte, ich könnte sortItems() aufrufen und die Spalte verwenden, die von sortColumn() zurückgegeben wird, aber ich kann nicht sehen, wie ich sehen kann, ob der Benutzer eine aufsteigende oder absteigende Sortierung durchführt.

Ich mache mir keine Sorgen über die Effizienz, also möchte ich nicht warten, bis die Einfügungen erledigt sind und dann die Sortierung vornehmen. Ich hätte gerne eine in Echtzeit sortierte Liste.

Danke!

Antwort

2

Wenn Ihr Baum Widget treeWidget genannt wird, sollten Sie in der Lage sein, die header() Methode aufrufen, die von QTreeWidget der Eltern QTreeView ist, dann sortIndicatorOrder() aus der QHeaderView Klasse:

treeWidget->header()->sortIndicatorOrder() 

Damit Sie kennen die aktuelle Sortierreihenfolge des Benutzers und können Ihre Sortierung entsprechend einfügen.

+0

Danke, ich habe diese Funktion einfach übersehen. Es funktioniert jetzt. – staackuser2

2

Ich habe kein Setup zum Testen, aber laut der Dokumentation sollte dies zu einer Sortierung führen, wenn Elemente eingefügt werden.

... 
treeWidget.sortByColumn(0, Qt::AscendingOrder); // column/order to sort by 
treeWidget.setSortingEnabled(true);    // should cause sort on add 

Qt empfiehlt dagegen tun, wie es auf Kosten der Leistung und zu sagen, dass Sie sollten schließlich die Adds sind abgeschlossen enabled gesetzt Sortierung. Hoffe das hilft.

+0

+1 für Hinweis auf die Schwerfälligkeit, wenn Sie auf Einfügen sortieren. Beachten Sie, dass dies nicht wichtig ist, wenn Sie nur jeweils 1 Element hinzufügen und nicht stapelweise. –

Verwandte Themen