PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : connect zwischen klassen



Mat
02-08-2006, 22:36
Hallo,
seit stunden dran und kein ergebnis. Ich will nur gaaanz einfach
2 Klassen durch einen connect so verbinden:

klasse1:


#include <QObject>

class Class1 : public QObject
{
Q_OBJECT
public:
...

signals:
void test();


Hier die Implementierung:


Class1::method1()
{
emit test();
}


und der receiver nur die Impl.



Class2::method2()
{
Class1 c;
connect(&c, SIGNAL(test()), this, SLOT(ausgabe());
}

Class2::ausgabe()
{
std::cout << "hier" << std::endl;
}


ich rufe method2 z.B wo anders in der KLasse Class2 auf oder auch von anderen Klasseren aus. Es kompiliert prima aber irgendwie läuft er nie in die Methode ausgabe() gibt also nichts aus...wo ist mein denkfehler?

Hun
03-08-2006, 00:07
Die Class1 c ist lokal in der Methode, wird daher bei Methodenende vernichtet. Pack sie woanders hin, dann sollte das passen. Ausserdem rufst du nie Class1::method1 auf, zumindest nicht von genau diesem Objekt.

Mat
06-08-2006, 18:19
hmm ich hätte noch eine frage:
muss ich denn in der Klasse in der ich das signal connecte die methode der klasse aufrufen die das signal sendet? Oder kann ich z.B eine methode einer anderen KLasse aufrufen die erst dann die Methode der 3-ten Klasse aufruft?

Also sprich: Ist es nicht so dass auch Klassen die nicht direkt die methode aufrufen die das emit beinhalten das signal connecten wenn diese das emit ausschickt?

IM moment habe ich es so:

Klasse 1 ruft methode(a) in klasse 2 auf.
methode(a) in Klasse 2 ruft methode(b) in Klasse3 auf.
erst methode(b) macht das emit.

Und ich connecte das signal von methode(b) mit Klasse1!
D.H indirekter Aufruf von methode(b).

Geht sowas nicht?