2009-08-26 14 views
1

ändern habe ich eine einfache Frage in Bezug auf die Aktualisierung eines QTreeView (oder jede Unterklasse von QAbstractItemView), wenn ein externen Objektänderung Modell. Nehmen wir an, eine Liste zeigt eine Unterklasse von QAbstractItemModel, und ein Element dieses Modells wird außerhalb des Listenfensters geändert, und wir möchten die Liste mit der Änderung aktualisieren. Was ist die übliche Strategie, um so etwas zu erreichen? Ich habe die Qt-Dokumentation von QAbstractItemModel angesehen und es gibt ein Signal mit dem Namen 'dataChanged' das (oder sollte) emitiert werden, wenn sich Daten vom Modell ändern. Aber da dieses Signal (wie alle QAbstractItemModel Funktionen/Signale/Slots) mit einem QModelIndex arbeitet, der nicht persistent ist, wie die Dokumentation eindeutig sagt, soll ich irgendwie eine Zuordnung meiner Daten zu QPersistentModelIndex (es) speichern, Wenn meine Daten ändern, werde ich in der Lage sein, die entsprechenden QPersistenModelIndex zu finden und diese als Argument für die verschiedenen QAbstractItemModel Funktionen zu verwenden? Ist das, was QPersistentModelIndex (es) verwendet werden? Oder fehlt mir etwas?ein QListView Aktualisierung bei äußerlichen Objekten

Vielen Dank.

ps: Ich denke, ich könnte nur die QTreeView nachladen, aber dann würde ich nicht wissen, welche Elemente erweitert wurden oder welche ausgewählt wurden. Gibt es eine Strategie, um dieses Problem zu lösen und die Liste einfach neu zu laden?

Antwort

6

QTreeView behandelt bereits den Fall, in dem sich die Daten des zugrunde liegenden Modells geändert haben (d. H. Das Modell hat das Signal dataChanged() ausgegeben). Das bedeutet, dass Sie keine zusätzlichen Arbeiten an der Ansicht ausführen müssen. Wenn Sie Ihr eigenes Modell (eine abgeleitete Klasse von QAbstractItemView) implementieren und den Inhalt des Modells ändern, müssen Sie einfach das Signal dataChanged() ausgeben, wenn die Änderung abgeschlossen ist. Der Signal/Slot-Mechanismus informiert die Ansicht automatisch über dieses Signal.

+0

"Wenn Sie Ihr eigenes Modell (eine abgeleitete Klasse von QAbstractItemView) implementieren," glaube ich, dass Sie eine abgeleitete Klasse von QAbstractItemModel meinten. – McLeary

Verwandte Themen