Seite 1 von 1
const Methode
Verfasst: 4. November 2011 15:44
von DBGTMaster
Code: Alles auswählen
void ComboBoxItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const {
// Signal werfen, damit Anwendung die Änderung mitprotokollieren kann..
emit systemGroupChanged(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole + 1).toInt(),
index.model()->data(index, Qt::UserRole + 1).toInt());
}
Meint mein netter Compiler:
..\ItemDelegates\ComboBoxItemDelegate.cpp:54: error: passing 'const ComboBoxItemDelegate' as 'this' argument of 'void ComboBoxItemDelegate::systemGroupChanged(int, int)' discards qualifiers
Nur warum? Ich verändere doch nichts am Objekt?? Oder versteh ich da etwas falsch??
lG
Re: const Methode
Verfasst: 4. November 2011 17:05
von solarix
Dass du nichts veränderst spielt keine Rolle: es ist ganz einfach verboten, in einer const-Methode eine nicht-const-Methode aufzurufen (sieh dir dazu den Code des Signals in der moc_-Datei an..).
Die Lösung ist hässlich wie die Nacht:
Code: Alles auswählen
void ComboBoxItemDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const {
// Signal werfen, damit Anwendung die Änderung mitprotokollieren kann..
const_cast<ComboBoxItemDelegate*>(this)->emit systemGroupChanged(index.model()->data(index.model()->index(index.row(), 0), Qt::UserRole + 1).toInt(),
index.model()->data(index, Qt::UserRole + 1).toInt());
}
BTW: ich kenne dein Projekt nicht, aber beim Kommentar "Signal werfen, damit Anwendung die Änderung mitprotokollieren kann.." würde ich eigentlich darauf schliessen, dass dieses Signal nicht vom Delegate sondern doch vom Model selbst geworfen werden müsste (es weiss ja, wann was geändert wird..). Aber das musst du selbst wissen.
hth..
Re: const Methode
Verfasst: 4. November 2011 18:23
von DBGTMaster
Ich verwende ein QStandardItemModel...
1.) Wie kann ich da über Signal feststellen, dass sich ein Wert geändert hat??
2.) Die Änderungen der ComboBox soll auch schon der Anwendung mitgeteilt werden, wenn auch noch nicht gespeichert wurde...
lG
Re: const Methode
Verfasst: 4. November 2011 18:48
von Christian81
Wenn Daten geändert werden und ins Model kommen dann geschieht das immer über setData()
Siehe
http://doc.qt.nokia.com/4.7/qabstractit ... ml#setData
Re: const Methode
Verfasst: 6. November 2011 22:38
von DBGTMaster
Kann ich den Model auch irgendwie sagen, dass das bearbeiten abgeschlossen werden soll, sprich auf "Enter gedrückt" wird...
Wenn User auf den Button speichern klickt, soll das aktuell bearbeitende Item auch übernommen werden... Damit das Model von der Änderungen mit bekommt, muss es ja mit "Enter" zuerst bestätigt werden..
Re: const Methode
Verfasst: 7. November 2011 09:59
von DBGTMaster
OK, ganz einfache Lösung, den Slot submit() von QAbstractItemModel aufrufen
