Signals

Alles rund um die Programmierung mit Qt
Antworten
Querdenker
Beiträge: 99
Registriert: 1. Dezember 2005 17:44
Wohnort: Karlsruhe

Signals

Beitrag von Querdenker »

Hi,

ich bekomme eine Klasse nicht kompiliert, die ein eigenes Signal haben soll.
Die Klasse ist so im Header definiert:

Code: Alles auswählen

class MyItem : public QItemDelegate{
   Q_OBJECT
 
   ... 

signals:
   void ischanged(int , int);

};
In der Implementierung:

Code: Alles auswählen

void MyItem::setModelData(bla, bla){

    ...

    emit ischanged(index.row(), index.column());
};
Die extrem vielsagende Comiler-Fehlermeldung (mir sagt die nix):

myitem.cpp:22: passing 'const MyItem' as 'this' argument of
'void MyItem::ischanged(int, int)' discards qualifiers

ich habe keine Ahnung was da falsch sein könnte.
blaxx
Beiträge: 5
Registriert: 27. Januar 2006 17:01
Kontaktdaten:

Beitrag von blaxx »

vielleicht solltest du die ganze datei mal posten, ich weiß nicht wo zeile 22 ist...

sonst versuch mal alle *.o dateien zu löschen und dann neu kompilieren/linken
Querdenker
Beiträge: 99
Registriert: 1. Dezember 2005 17:44
Wohnort: Karlsruhe

Beitrag von Querdenker »

Hi,

Zeile 22 ist genau die Zeile mit

emit

Ist nichts anderes als eine reimplementierte Methode von QItemDelegate.
Nur ich möchte eben ein zustätzliches Signal

Code: Alles auswählen

void MyItem::setModelData(QWidget *editor, QAbstractItemModel *model,
                          const QModelIndex &index) const{
   QString t;
   if(tmpTyp == 0){
	   QTextEdit *edit = static_cast<QTextEdit*>(editor);
	   t = edit->toPlainText();
   } else {
	   QLineEdit *edit = static_cast<QLineEdit*>(editor);
	   t = edit->text(); 
   } 
   model->setData(index, t, Qt::EditRole);
   emit ischanged(index.row(), index.column());      //<<---Zeile 22                
};
und dieses Signal im Header:

signal:
void ischanged(int, int);

QItemDelegate erbt indirect von QObject.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Deine Funktion ist const, also ist auch dein this-Zeiger const. isChanged() ist nicht const. Also wird dein Qualifier 'const' verworfen und die Fehlermeldung/Warnung kommt.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Querdenker
Beiträge: 99
Registriert: 1. Dezember 2005 17:44
Wohnort: Karlsruhe

Beitrag von Querdenker »

Sprich:
Ich musste eine Funktion bauen, die aufrufen und aus der neuen Funktion das Signal feuern? Die Funktion selbst kann ich nicht ändern, da sie von den
Delegates so vorgegeben ist.
Müsste ich ausprobieren.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Oder was ganz fieses in der Art

Code: Alles auswählen

MyItem *that = (MyItem*)this
...
emit that->ischanged()
Aber bitte nicht zum Standard werden lassen!
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Querdenker
Beiträge: 99
Registriert: 1. Dezember 2005 17:44
Wohnort: Karlsruhe

Beitrag von Querdenker »

*upf*
das ist natürlich scharfer Tobak :D

Bin nur gottfroh, dass ich mein Prog. hinterher nicht selbst pflegen muss :roll:

Aber so läuft's

Danke :)
Antworten