QDataWidgetMapper
Verfasst: 5. Oktober 2009 21:30
Hallo,
ich versuche gerade den QDataWidgetMapper zu nützen. Aber leider noch ohne Erfolg. Das Problem ist, dass die Sachen die ich an der GUI eintrage einfach nie im Model landen, dessen Methoden scheinen nie aufgerufen zu werden.
Mein Code in Ausschnitten:
Im Widget-Konstruktor:
mapping = new QDataWidgetMapper(this);
mapping->setModel(mitglied);
mapping->setOrientation(Qt::Vertical);
mapping->setItemDelegate(new QItemDelegate(mapping));
mitgliedschaftLayout->addWidget(factory->constructVornameLabel(), 2, 0);
vornameLineEdit = factory->constructVornameLineEdit();
mitgliedschaftLayout->addWidget(vornameLineEdit, 2, 1);
mapping->addMapping(vornameLineEdit, Mitglied::VORNAME);
mapping->toFirst();
Wobei mitglied ein (über eine Indirektion) von QAbstractListModel abgeleitetes, selbst geschriebenes Model ist. Überschrieben ist:
rowCount
data()
setData()
headerData()
flags()
Bei den letzteren drei habe ich überprüft dass sie in meinem Code nie aufgerufen werden. Was ich verifizieren konnte ist dass die section-Angaben dauerhaft gespeichert werden, also das Mapping wird anscheinend nicht zurückgesetzt.
headerData und flags:
QVariant Mitglied::headerData(int section, Qt::Orientation orientation, int role) {
return QVariant(); // TODO: Maybe generate implementation.
}
Qt::ItemFlags Mitglied::flags(const QModelIndex &index) {
Qt::ItemFlags flags = Persistent::flags(index);
flags |= Qt::ItemIsEditable;
return flags;
}
Die setData-Methode schließe ich aus, weil die wird ja nichtmal aufgerufen. Dafür wird data() aufgerufen, aber mit role EDIT_ROLE. Das Model ist mit dem Q_OBJECT-Makro definiert.
Sieht irgendwer einen Fehler in den Codeausschnitten? Oder, anders gefragt, was muss man alles tun um einen QDataWidgetMapper zusammen mit einem selbstdefinierten Model einzusetzen? Was sind da Fallstricke die man leicht mal vergisst?
Schonmal danke für alle Hinweise!
ich versuche gerade den QDataWidgetMapper zu nützen. Aber leider noch ohne Erfolg. Das Problem ist, dass die Sachen die ich an der GUI eintrage einfach nie im Model landen, dessen Methoden scheinen nie aufgerufen zu werden.
Mein Code in Ausschnitten:
Im Widget-Konstruktor:
mapping = new QDataWidgetMapper(this);
mapping->setModel(mitglied);
mapping->setOrientation(Qt::Vertical);
mapping->setItemDelegate(new QItemDelegate(mapping));
mitgliedschaftLayout->addWidget(factory->constructVornameLabel(), 2, 0);
vornameLineEdit = factory->constructVornameLineEdit();
mitgliedschaftLayout->addWidget(vornameLineEdit, 2, 1);
mapping->addMapping(vornameLineEdit, Mitglied::VORNAME);
mapping->toFirst();
Wobei mitglied ein (über eine Indirektion) von QAbstractListModel abgeleitetes, selbst geschriebenes Model ist. Überschrieben ist:
rowCount
data()
setData()
headerData()
flags()
Bei den letzteren drei habe ich überprüft dass sie in meinem Code nie aufgerufen werden. Was ich verifizieren konnte ist dass die section-Angaben dauerhaft gespeichert werden, also das Mapping wird anscheinend nicht zurückgesetzt.
headerData und flags:
QVariant Mitglied::headerData(int section, Qt::Orientation orientation, int role) {
return QVariant(); // TODO: Maybe generate implementation.
}
Qt::ItemFlags Mitglied::flags(const QModelIndex &index) {
Qt::ItemFlags flags = Persistent::flags(index);
flags |= Qt::ItemIsEditable;
return flags;
}
Die setData-Methode schließe ich aus, weil die wird ja nichtmal aufgerufen. Dafür wird data() aufgerufen, aber mit role EDIT_ROLE. Das Model ist mit dem Q_OBJECT-Makro definiert.
Sieht irgendwer einen Fehler in den Codeausschnitten? Oder, anders gefragt, was muss man alles tun um einen QDataWidgetMapper zusammen mit einem selbstdefinierten Model einzusetzen? Was sind da Fallstricke die man leicht mal vergisst?
Schonmal danke für alle Hinweise!