mal wieder Signal Slot Problem!
mal wieder Signal Slot Problem!
Hallo Leute,
ich habe ein Problem mit dem SignalSlot Mechanismus.
und zwar kriege ich keine Verbindung hin.
Habe zwei Klassen:
A und B;
in A wird B mit new angelegt, und verbunden, der Returnwert von connect is allerdings false!!
Was ich möchte ist das ich aus der Klasse B eine Methode der Klasse A auslösen kann.
Ich habe eine schon gesucht finde meinen Fehler aber nicht! Dahe hier die Frage!
in A.cpp
A::init()
{
B* b;
b = new B;
bool isOK = connect(this, signal(methodeA()), b, slot(slotB()));
}
in A.h
{
privat slot:
methodeA();
}
in B.h
{
public signals:
slotB();
}
Fragen:
1. ich habe nur ein connect, das ist doch richtig?
2. connect liefert mir ein false zurück, kann man das irgendwie genauer auslesen?
ich habe ein Problem mit dem SignalSlot Mechanismus.
und zwar kriege ich keine Verbindung hin.
Habe zwei Klassen:
A und B;
in A wird B mit new angelegt, und verbunden, der Returnwert von connect is allerdings false!!
Was ich möchte ist das ich aus der Klasse B eine Methode der Klasse A auslösen kann.
Ich habe eine schon gesucht finde meinen Fehler aber nicht! Dahe hier die Frage!
in A.cpp
A::init()
{
B* b;
b = new B;
bool isOK = connect(this, signal(methodeA()), b, slot(slotB()));
}
in A.h
{
privat slot:
methodeA();
}
in B.h
{
public signals:
slotB();
}
Fragen:
1. ich habe nur ein connect, das ist doch richtig?
2. connect liefert mir ein false zurück, kann man das irgendwie genauer auslesen?
Re: mal wieder Signal Slot Problem!
Einfach nochmal lesen was du gepostet hast. Dann sollte es klar seingrisu1972 hat geschrieben: bool isOK = connect(this, signal(methodeA()), b, slot(slotB()));
privat slot:
methodeA();
public signals:
slotB();
Code: Alles auswählen
bool isOK = connect(this, signal(methodeA()), b, slot(slotB()));
Ja.. die Konsolenausgabe lesen...2. connect liefert mir ein false zurück, kann man das irgendwie genauer auslesen?
oh, oh, ohhh
ich habe bei der Abstraktion einen Fehler gemacht. Funktionieren tut es allerdings nicht!
so muss es sein:
in A.cpp
A::init()
{
B* b;
b = new B;
bool isOK = connect(b, signal(signalB()), this, slot(methodeA()));
}
in A.h
{
privat slot:
methodeA();
}
in B.h
{
public signals:
signalB();
}
ich habe bei der Abstraktion einen Fehler gemacht. Funktionieren tut es allerdings nicht!
so muss es sein:
in A.cpp
A::init()
{
B* b;
b = new B;
bool isOK = connect(b, signal(signalB()), this, slot(methodeA()));
}
in A.h
{
privat slot:
methodeA();
}
in B.h
{
public signals:
signalB();
}
Abstraktion ist ne gute Sache, aber bitte korrekt (sonst korrigieren wir nicht existierende Fehler)
ist noch immer nicht kompilierbar... siehe
http://doc.trolltech.com/4.3/qobject.html#connect
hast du das wirklich so, oder fehlt da noch return-typ (und auf Verdacht: Parameter)?
Code: Alles auswählen
bool isOK = connect(b, signal(signalB()), this, slot(methodeA()));
http://doc.trolltech.com/4.3/qobject.html#connect
Code: Alles auswählen
privat slot:
methodeA();
stimmt:
return wert ist void;
keine Parameterübergabe nur auslösen:
da es bei mir nicht funktioniert möchte ich vor allem wissen ob ich prinzipiell richtig vorgehe!
Das heist:
Ist das connect an der richtigen Stelle in der Klasse A nachdem ich eine Instanz der Klasse B erzeugt habe?
Ich habe nur einmal connect. In der Klasse B wird nur das signal deklariert und durch emit aufgerufen, stimmt das so?
return wert ist void;
keine Parameterübergabe nur auslösen:
da es bei mir nicht funktioniert möchte ich vor allem wissen ob ich prinzipiell richtig vorgehe!
Das heist:
Ist das connect an der richtigen Stelle in der Klasse A nachdem ich eine Instanz der Klasse B erzeugt habe?
Ich habe nur einmal connect. In der Klasse B wird nur das signal deklariert und durch emit aufgerufen, stimmt das so?
In dem Beispiel:
http://doc.trolltech.com/4.3/signalsandslots.html
werden zwei objekte einer Klasse erzeugt, mein Problem liegt scheinbar daran, das ich verschiedene Klassen habe, dami komme ich nicht weiter (leider)!
http://doc.trolltech.com/4.3/signalsandslots.html
werden zwei objekte einer Klasse erzeugt, mein Problem liegt scheinbar daran, das ich verschiedene Klassen habe, dami komme ich nicht weiter (leider)!
nein.. das Problem ist dass du die Doku nicht befolgst..
schau dir einmal
http://de.wikipedia.org/wiki/Signal-Slo ... _und_Slots
Vergleiche danach alles (!) was da rot ist mit deiner Klasse (Header-Datei).. alles was rot ist, musst du ganz genau so befolgen!!!
Mit der Konsolenaufgabe meine ich nicht den Return-Wert, sondern die Programmausgabe.. unter Unix halt in der Konsole, unter windows brauchts noch "config += console" in der Qt-Profile, damit du diese Ausgabe hast..
schau dir einmal
http://de.wikipedia.org/wiki/Signal-Slo ... _und_Slots
Vergleiche danach alles (!) was da rot ist mit deiner Klasse (Header-Datei).. alles was rot ist, musst du ganz genau so befolgen!!!
Mit der Konsolenaufgabe meine ich nicht den Return-Wert, sondern die Programmausgabe.. unter Unix halt in der Konsole, unter windows brauchts noch "config += console" in der Qt-Profile, damit du diese Ausgabe hast..
auch in dem Beispiel ist es eine Klasse von der es zwei Instanzen gibt auf die zugegriffen wird:
http://de.wikipedia.org/wiki/Signal-Slo ... _und_Slots
ich habe zwei unterschiedliche Klassen A und B:
B wird in einer Methode von A mit new angelegt und soll eine Methode von A aufrufen könne.
In A möchte ich sie mit connect verbinden.
Daher dem Header der Klasse A nur den slot deklariert
Und in Klasse B nur das Signal deklariert!
ich denke das ist richtig, oder
http://de.wikipedia.org/wiki/Signal-Slo ... _und_Slots
ich habe zwei unterschiedliche Klassen A und B:
B wird in einer Methode von A mit new angelegt und soll eine Methode von A aufrufen könne.
In A möchte ich sie mit connect verbinden.
Daher dem Header der Klasse A nur den slot deklariert
Und in Klasse B nur das Signal deklariert!
ich denke das ist richtig, oder
also ich habe versuch gleich im ersten Eintrag deutlichzu machen, das ich zwei Klassen habe und ich von der einen eine Methode der anderen aufrufen möchte, ist vielleicht nicht klar formuliert gewessen, werde an mir arbeiten dies zu verbessern.
- Konsollenausgabe:
der Eintrag "config += console" ind das *.pro Datei brachte nichts
- ich verende Eclipse und QT 4.2.1
- Q_OBJECT ist in beiden drin
funktioniert denoch nicht!
ist meine Vorgehen den richtig wie ich es oben beschrieben habe:
- Konsollenausgabe:
der Eintrag "config += console" ind das *.pro Datei brachte nichts
- ich verende Eclipse und QT 4.2.1
- Q_OBJECT ist in beiden drin
funktioniert denoch nicht!
ist meine Vorgehen den richtig wie ich es oben beschrieben habe:
Es ist sonnenklar was du moechtest... aber du antwortest unvollstaendig (z.B. " der Eintrag "config += console" ind das *.pro Datei brachte nichts")grisu1972 hat geschrieben:also ich habe versuch gleich im ersten Eintrag deutlichzu machen, das ich zwei Klassen habe und ich von der einen eine Methode der anderen aufrufen möchte, ist vielleicht nicht klar formuliert gewessen, werde an mir arbeiten dies zu verbessern.
theoretisch ja, aber der Code hat x Fehler... poste doch einfach mal die beiden originalen(!) header deiner beiden Klassen, sowie die (komplette) init-Methode.ist meine Vorgehen den richtig wie ich es oben beschrieben habe: