Seite 1 von 1

Signals

Verfasst: 2. Februar 2006 11:36
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.

Verfasst: 2. Februar 2006 12:23
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

Verfasst: 2. Februar 2006 12:42
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.

Verfasst: 2. Februar 2006 13:45
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.

Verfasst: 2. Februar 2006 15:53
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.

Verfasst: 2. Februar 2006 16:08
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!

Verfasst: 2. Februar 2006 18:24
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 :)