Seite 1 von 1

Problem mit Signal und Slot Mechanismus

Verfasst: 19. März 2008 18:03
von Mensch
Hallo!

Hab folgenden Code geschrieben, aber leider tut sich nichts, wenn ich das Signal auslöse:

myGraphicsScene.h
class MyGraphicsScene : public QGraphicsScene
{
...

signals:
void mouseMoved ();
....
};


myGraphicsScene.cpp
void MyGraphicsScene::mousePressEvent ( QGraphicsSceneMouseEvent * mouseEvent )
{
...
emit mouseMoved();
}

Folgendes steht im MainWindow:

...
connect( scene, SIGNAL( mouseMoved() ), this, SLOT( ... ) );
...

scene ist dabei ein Pointer auf ein Objekt von MyGraphicsScene. Der SLOT ist in der Klasse definiert, in der das connect aufgerufen wird und lässt sich bei anderen Signalen prima ansteuern.
Die anderen connects klappen ohne Probleme, nur dieses eine eben nicht, was mache ich falsch?

Danke im Voraus!
Grüße

Verfasst: 19. März 2008 18:23
von upsala
Wo ist dein Q_OBJECT?

Verfasst: 20. März 2008 11:13
von Mensch
Q_Object ist im QMainWindow, bzw der davon abgeleiteten Klasse.

class qtSiftApp : public QMainWindow, private Ui::qtSiftApplication
{
Q_OBJECT
private:
...

public:
qtSiftApp(QMainWindow *parent = 0);


public slots:
...
void markFeature();
};

Verfasst: 20. März 2008 11:28
von franzf
Mensch hat geschrieben:Q_Object ist im QMainWindow, bzw der davon abgeleiteten Klasse.
Dir ist schon klar dass du das für JEDE von QObject abgeleitete Klasse machen musst, nicht nur fürs MainWindow.
In deinem Fall auch für MyGraphicsScene!

Verfasst: 20. März 2008 12:31
von Mensch
Danke! Das probier ich gleich mal...

Verfasst: 20. März 2008 14:37
von Mensch
Wenn ich in die MyGraphicScene-Klasse auch Q_OBJECT schreibe, dann taucht in der Methode, in der ich einen Pointer auf eine MyGraphicScene Objekt anlege folgender Fehler auf:

undefined reference to `vtable for MyGraphicsScene'

Hab ich noch was vergessen?

Verfasst: 20. März 2008 14:40
von franzf
Ja, wenn du irgendwo Q_OBJECT reinschreibst musst du auch nochmal qmake auf dein Projektfile aufrufen, sonst wird nicht gemoct ;)

Verfasst: 20. März 2008 15:05
von Mensch
Danke ;) Jetzt kompiliert es einwandfrei, allerdings funktioniert es immernoch nicht. Wenn ich in die Szene klicke wird nicht das ausgeführt was im connecteten SLOT steht. Wo kann ich noch Fehler gemacht haben? ;)

Grüße

Verfasst: 20. März 2008 15:22
von RHBaum
schau mal zur debug laufzeit ins Meldung fenster (visual studio)
alternativ auf die console oder so .....
dort muessten warnungen kommen, wenn du was connectest, was nicht existiert .... sind meisten schreibfehler :-)

Ciao ...

Verfasst: 20. März 2008 16:59
von Mensch
Hab's unter Ubuntu mit dem GNU debugger gemacht...Da wird kein Fehler gemeldet. Die Funktion, die ich als SLOT() angegeben habe wird nur einfach nicht ausgeführt... :-(