Änderungen in View auswerten

Alles rund um die Programmierung mit Qt
Antworten
D_ron
Beiträge: 38
Registriert: 24. Juli 2007 11:53
Wohnort: Karlsruhe
Kontaktdaten:

Änderungen in View auswerten

Beitrag von D_ron »

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!
marco
Beiträge: 41
Registriert: 6. Dezember 2006 23:46
Wohnort: Niederrhein

Beitrag von marco »

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.
Gruß, Marco
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Verwende in deinem Model eine eigene Role für Items zur Markierung welche Items gelöscht/geändert wurden. Und um nur 'nicht gelöschte' Items in deiner View anzuzeigen kannst du dann ja noch ein ProxyModel dazwischenschalten.
D_ron
Beiträge: 38
Registriert: 24. Juli 2007 11:53
Wohnort: Karlsruhe
Kontaktdaten:

Beitrag von D_ron »

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.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

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
Roles
Antworten