Hi!
Ich habe einen QSqlTableModel - Mapping auf einem dateTimeEdit.
funktioniert korrekt und trägt mir den dateTime in die Datenbank.
Wie realisiere ich, dass er stattdessen aber einen Timestamp einträgt?
Vielleicht geht es mit einem QDelegate, aber wenn, weiß ich nicht wie, denn ich will eigentlich kein neues Widget öffnen oder so.
[gelöst] DateTime to Timestamp
[gelöst] DateTime to Timestamp
Zuletzt geändert von TieKei am 7. Juli 2008 19:26, insgesamt 1-mal geändert.
so, selbst gelöst
Geht doch mit Delegate, hier ein kleines Beispiel:
Die Klasse MeinItemDelegate:
Geht doch mit Delegate, hier ein kleines Beispiel:
Code: Alles auswählen
_MeinMapper.addMapping(ui.dateTimeEdit, 1); //ein normales Mapping (das dateTimeEdit, bekommt die Daten aus Column 1)
_MeinMapper.setItemDelegate(new MeinItemDelegate()); //erzeugt ein neues Exemplar der Klasse MeinItemDelegate
Code: Alles auswählen
public class MeinItemDelegate extends QItemDelegate {
public void setEditorData(QWidget editor, QModelIndex index ) { //hier wird das AUSLESEN behandelt
if(index.column() == 1) { //falls das Object aus Column 1 stammt...
QDateTime date = new QDateTime(); //erzeuge neues QDateTime Object (temporär)
date.setTime_t(((Long)index.data()).intValue()); //gib dem neuem Object die Werte aus der DB (also den Timestamp)
((QDateTimeEdit)editor).setDateTime(date); //übergebe die werte des neuen temp Objects dem editor Widget (also meinem "echtem" DateTimeEdit)
} else {
super.setEditorData(editor, index);
}
}
public void setModelData(QWidget editor, QAbstractItemModel model, QModelIndex index) { //hier verändere ich die Daten bevor sie in die DB geschrieben werden
if(index.column() == 1) {
QDateTimeEdit edit = (QDateTimeEdit)editor; //edit wird dem editor Widget gleich gesetzt (bekommt die werte des "echten" DateTimeEdit)
model.setData(index, new Long(((QDateTimeEdit)edit).dateTime().toTime_t())); //ich setze meine Daten des Models auf den Timestamp des DateTimeEdit
// das mache ich mit .dateTime().toTime_t()
} else {
super.setModelData(editor, model, index);
}
}
}