const Methode

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

const Methode

Beitrag 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
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Re: const Methode

Beitrag 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..
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: const Methode

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: const Methode

Beitrag 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
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: const Methode

Beitrag 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..
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: const Methode

Beitrag von DBGTMaster »

OK, ganz einfache Lösung, den Slot submit() von QAbstractItemModel aufrufen :)
Antworten