Seite 1 von 1

Emittiertes Signal kommt nicht an

Verfasst: 7. Februar 2012 10:06
von karocke
Hej,

ich habe gerade folgendes Problem:
Eine Kamera ruft eine Callback-Funktion auf, wenn sie ein neues Bild zur Verfügung stellen kann. Die Callback-Funktion weiß, zu welchem Objekt sie gehört. Jetzt will ich in der Callback-Funktion ein Signal aussenden, dass ein neues Bild zur Verfügung steht.
Mit diesem Signal habe ich einen Slot verknüpft, der dann das geholte Bild verarbeiten soll.
Das will ich machen, damit die Callback-Funktion nicht zu lange beschäftigt ist, da ich sonst eine hässliche Zeitverzögerung in meine Ausgabe bekomme.
Problem dabei: Der Slot wird leider nie aufgerufen. Wenn ich eine Ausgabe direkt vor die emit-Zeile packe, wird diese ausgegeben, die Callback-Funktion läuft also auf jeden Fall durch.

Ich verstehe leider nicht, warum das so ist. Kann mir jemand helfen?

Gruß
Karocke

Hier mal ein paar Codeschnipsel:

im Konstruktor:

Code: Alles auswählen

MyClass::MyClass() {
  [...]
  CONNECT(this, SIGNAL(frameReady()), this, SLOT(processFrame()); 
In der Callback-Funktion (statische Funktion):

Code: Alles auswählen

MyClass::onFrameReadyCallback(CAMERA_API_ARGUMENT_TYPE arg) {
  MyClass* This = reinterpret_cast<MyClass*>(arg.m_Parameter);
  [...]
  emit This->frameReady();
}
Slot:

Code: Alles auswählen

void MyClass::processFrame() {
  // Wird leider nicht aufgerufen
}

Re: Emittiertes Signal kommt nicht an

Verfasst: 7. Februar 2012 10:52
von archer
Sind denn beide Klassen, Sender und Empfänger, von QObject abgeleitet?
Ist in beiden Header-Dateien das Q_OBJECT Macro gesetzt?

Re: Emittiertes Signal kommt nicht an

Verfasst: 7. Februar 2012 11:04
von Christian81
Des weiteren hat connect() auch einen Rückgabewert

Re: Emittiertes Signal kommt nicht an

Verfasst: 7. Februar 2012 20:27
von uwe_road
Hallo,
Da fehlt auf jeden fall eine ")" am Ende deines connects. Sollte es dann immer noch nicht klappen, dann schau doch mal nach ob das Signal überhaupt gesendet wird.
lg