Aktualisierung eine QListView, wenn Objekte extern ändern
Ich habe eine einfache Frage bezüglich der Aktualisierung einer QTreeView (oder eine beliebige Unterklasse von QAbstractItemView), wenn ein model-Objekt ändert sich nach außen. Lassen Sie uns sagen, dass eine Liste zeigt eine Unterklasse von QAbstractItemModel, und ein Element, das Modell verändert wird, die außerhalb der Fenster, und wir möchten, aktualisieren Sie die Liste mit den Veränderungen. Was ist die übliche Strategie etwas erreichen zu wollen ? Ich habe die Qt Dokumentation von QAbstractItemModel und es ist ein signal namens " dataChanged' ist (oder sein sollte) emited, wenn Daten aus dem Modell verpasst. Aber da dieses signal (wie alle QAbstractItemModel Funktionen/Signale/slots) mit einem QModelIndex, die nicht persistent, wie die Dokumentation sagt ganz klar, soll ich den laden irgendwie ein mapping meiner Daten zu QPersistentModelIndex(es), also wenn sich meine Daten ändern, werde ich in der Lage zu finden, die entsprechende QPersistenModelIndex und verwenden, die als argument an die verschiedenen QAbstractItemModel Funktionen ? Ist es das, was QPersistentModelIndex(es) werden verwendet ? Oder bin ich etwas fehlt ?
Danke.
ps: ich denke, ich könnte einfach neu laden QTreeView, aber dann würde ich nicht wissen, welche Einträge wurden erweitert oder die ausgewählt wurden. Gibt es eine Strategie, dieses problem zu überwinden, und nur ein reload der Liste ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
QTreeView
bereits behandelt den Fall, in dem das zugrunde liegende Modell die Daten geändert (d.h. das Modell hat emittiertedataChanged()
signal). Das bedeutet, dass Sie nicht brauchen, um jede zusätzliche Arbeit, die auf die anzeigen.Wenn Sie die Umsetzung Ihrer eigenen Modell (eine abgeleitete Klasse von
QAbstractItemView
), und Sie machen eine änderung der Inhalte des Modells, müssen Sie einfach Strahlen diedataChanged()
signalisieren, wenn die änderung abgeschlossen ist. Der signal/slot-Mechanismus informiert automatisch die Ansicht mit, dass sich das signal.