Ich nutze QSqlTableModel mit QSqlTableModel::OnManualSubmit und wollte vor QSqlTableModel->submitAll() die vorherige Werte in eine Log-Datei schreiben um Veränderungen zu loggen. Dafür gehe ich die Tabelle durch und suche nach isDirty Felder.
Somit weiß ich, was verändert wurde, bzw. gespeichert werden muss. Aber wie komme ich an die alte Werte?
Ich hatte mir überlegt QSqlTableModel abzuleiten und UserRole dafür zu nutzen. Wenn ich QSqlTableModel ableite, funktioniert setData irgendwie nicht mehr.
Code: Alles auswählen
class MCSqlTableModel : public QSqlTableModel {
Q_OBJECT
public:
MCSqlTableModel(QObject* parent = 0, QSqlDatabase db = QSqlDatabase());
Qt::ItemFlags flags(const QModelIndex &index) const;
bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::DisplayRole);
private:
};
Code: Alles auswählen
#include "mcsqltablemodel.h"
MCSqlTableModel::MCSqlTableModel(QObject* parent, QSqlDatabase db): QSqlTableModel(parent, db) {
}
Qt::ItemFlags MCSqlTableModel::flags(const QModelIndex& index) const {
Qt::ItemFlags flags = QSqlQueryModel::flags(index);
flags |= Qt::ItemIsEditable;
return flags;
}
bool MCSqlTableModel::setData(const QModelIndex& index, const QVariant& value, int role) {
return QSqlQueryModel::setData(index, value, role);
}
Frage:
- ist das überhaupt der richtige Weg, oder gibt es eine einfachere Möglichkeit?
- was müsste in setData stehen, damit die QSqlTableModel::setData(...) Funktion hergestellt ist? Leite ich QSqlTableModel falsch ab?