Hallo!
Ich habe ein Baumansicht die auf einem eigenen Modell basiert, abgeleitet von QAbstractItemModel.
Das Modell setzt sich aus dynamischen Daten zusammen, die bei Programmstart ausgelesen werden. Es gibt 4 unterschiedliche Typen von Items, das ganze ist wie folgt strukturiert:
rootItem
|__Produkt (1-n)
|__Artikel (1-n)
|___Typ (1-n)
|__Daten (1-n)
Die View ist editierbar für die Items Produkt, Artikel und Typ.
Es gibt auch bereits verschiedene States wie "neu", "geändert" und "gelöscht".
Diese Änderungen sollen dann wieder in die Datenbank zurückgeschrieben werden. Die Frage ist nur wie ich mir am besten merke, welche Daten geändert bzw. gelöscht wurden. Gelöschte Items sind ja nicht mehr im Originalmodell vorhanden, d.h. das Originalmodell welches die TreeView verwendet kann ich nicht nehmen.
Wie würdet Ihr das Umsetzen?
Grüsse!
Änderungen in View auswerten
hallo,
vielleicht kannste dein model von QSqlTableModel ableiten? dort werden änderungen solange protokolliert bis ein submit() oder revert() erfolgt.
ansonsten würde ich dir raten, ein eigenes caching-model einzuführen.
im übrigen kann man das in einem QTreeView auch schön farbig kenntlich machen. viele leute fahren auf sowas ab.
vielleicht kannste dein model von QSqlTableModel ableiten? dort werden änderungen solange protokolliert bis ein submit() oder revert() erfolgt.
ansonsten würde ich dir raten, ein eigenes caching-model einzuführen.
im übrigen kann man das in einem QTreeView auch schön farbig kenntlich machen. viele leute fahren auf sowas ab.
Gruß, Marco
Hallo upsala,
das mit der Role ist auch eine Idee, ich weiss nur nicht wie man eigene roles definiert. wo finde ich das in der doku??
Die data() methode frägt diese ab. Wenn also Qt::Displayrole kommt dann
hole ich mir das item der treeview und kann dann den "Status" (neu, geändert, gelöscht) abfragen. diese daten habe ich direkt an jedes item in der treeview gekapselt. für item == deleted gebe ich einfach nichts mehr zurück. geänderte und neue items erscheinen mit einer farblichen markierung in der treeview. somit habe ich eigentlich doch alles im originalmodell was ich später zum zurückschreiben brauche, nähmlich die items inkl. ihren status.
das mit der Role ist auch eine Idee, ich weiss nur nicht wie man eigene roles definiert. wo finde ich das in der doku??
Die data() methode frägt diese ab. Wenn also Qt::Displayrole kommt dann
hole ich mir das item der treeview und kann dann den "Status" (neu, geändert, gelöscht) abfragen. diese daten habe ich direkt an jedes item in der treeview gekapselt. für item == deleted gebe ich einfach nichts mehr zurück. geänderte und neue items erscheinen mit einer farblichen markierung in der treeview. somit habe ich eigentlich doch alles im originalmodell was ich später zum zurückschreiben brauche, nähmlich die items inkl. ihren status.
Code: Alles auswählen
bool QSortFilterProxyModel::filterAcceptsRow ( int source_row, const QModelIndex & source_parent ) const
QVariant QAbstractItemModel::data ( const QModelIndex & index, int role = Qt::DisplayRole ) const