2016-10-21 3 views
-1

Ich habe eine TreeView in meiner app sortieren. Ich beschränke die angezeigten Zeilen mit einer Klasse, die von QSortFilterProxyModel geerbt wird. Ich muss auch die Elemente in der TreeView basierend auf selectedIndex einer Combobox sortieren. Was ich tat, so weit ist:Wie TreeView Artikel mit QSortFilterProxyModel basierend auf Combobox Selection

  1. Wenn der ausgewählte Index der Combo-Box ändert, werde ich eine Funktion in der von QSortFilterProxyModel vererbten Klasse aufrufen, die sort(0) Funktion aufruft.
  2. In der Klasse von QSortFilterProxyModel geerbt, ich habe die lessThan Funktion außer Kraft gesetzt haben und meine Logik implementiert, basierend auf der aktuellen Auswahl in der ComboBox

Das Problem ist, wird die Sortierung nicht immer der Fall. Wenn ich die App starte und ein Element in der Combobox auswähle, werden die Baumelemente korrekt sortiert. Wenn ich jedoch ein anderes Element in der Combobox auswähle, wird die Struktur nicht aktualisiert. Die lessThan-Funktion wird jedoch aufgerufen!

+1

benötigen Sie den Code, den Sie verwenden zur Verfügung zu stellen, die Informationen, die Sie nicht ausreichend zur Verfügung gestellt, um das Problem zu schließen. – Mike

+0

@Mike Ich glaube, dass die Information, die ich zur Verfügung gestellt habe, genug für diejenigen ist, die die Antwort kennen. Wie Sie sehen können, hat Kevin das Problem verstanden und es beantwortet. –

Antwort

1

Wenn Ihr Proxy für dynamische Sortierung/Filter eingestellt ist, was wahrscheinlich ist, dann wird das Aufrufen von sort() mit der gleichen Spalte und Sortierrichtung wieder nichts tun. Siehe https://code.woboq.org/qt5/qtbase/src/corelib/itemmodels/qsortfilterproxymodel.cpp.html#_ZN21QSortFilterProxyModel4sortEiN2Qt9SortOrderE

Sie müssen auch/alternativ QSortFilterProxyModel::invalidate() aufrufen, um das Umsortieren auszulösen.

+0

danke, in meinem Fall waren beide Aktionen nötig, damit die Sortierung funktioniert. setDynamicSortFilter (false) beim Erstellen einer Instanz der QSortFilterProxyModel-Klasse und Aufruf von invalidate() vor dem Aufruf von sort (0) –

Verwandte Themen