Seite 1 von 1

Fehler: No such Signal

Verfasst: 6. März 2008 15:25
von Baz
Hallo! Ich habe ein Problem mit Signals und Slots. Folgender Beispielcode beschreibt meine Programmstruktur.

class Oberklasse : public QThread {
........Code........
};

class Unterklasse1 : public Oberklasse {
.........Code......
signals:
void meinSignal(QString);
};

class Unterklasse2 : public Oberklasse {
........Code........
public slots:
void meinSlot(QString);
};

int main() {

Unterklasse1 * class1 = new Unterklasse1();
Unterklasse2 * class2 = new Unterklasse2();

QObject::connect(class1, SIGNAL(meinSignal(QString()),
class2, SLOT(meinSlot(QString()));

}



Meine Oberklasse erbt von QThread. Es gibt zwei Unterklassen die jeweils von der Oberklasse erben.
In der main() will ich nun ein SIGNAL von der einen Unterklasse mit einem SLOT von der anderen Unterklasse verbinden.
Kompilieren tut das ganze. Zur Laufzeit krieg ich dann allerdings folgenenden Fehler:
Object::connect: No such slot Oberklasse::meinSlot(QString)

Was läuft falsch? und vor allem steht in der Fehlermeldung, dass die Oberklasse den SLOT nicht hat. Hat sie ja aber tatächlich nicht, denn Unterklasse2 besitzt meinSlot(QString) und bei ihr versuch ich ja auch zu connecten.

Verfasst: 6. März 2008 16:13
von Christian81
Q_OBJECT vergessen.

Verfasst: 6. März 2008 16:46
von Baz
das hab ich aber nur in meiner beispielklasse hier vergessen :(
das steht in der Oberklasse!
in der main hab ich kein Q_OBJECT da braucht man es doch auch nicht oder?

Verfasst: 6. März 2008 17:47
von Christian81
Wenn Du in einer Klasse ein signal oder slot definierst brauchst du dort auch ein Q_OBJECT...

Verfasst: 6. März 2008 17:58
von ObeliX
und es müßte doch wohl

Code: Alles auswählen

 QObject::connect(class1, SIGNAL(meinSignal(QString),class2, SLOT(meinSlot(QString)); 
anstelle

Code: Alles auswählen

QObject::connect(class1, SIGNAL(meinSignal(QString()),class2, SLOT(meinSlot(QString())); 
heißen. oder ?

gruß Obel

Verfasst: 6. März 2008 18:35
von Baz
danke....hatte das Q_OBJECT nur in der Oberklasse stehen
Jetzt läuft es