Seite 1 von 1

Slot wird nicht in abgeleiteter Klasse gesucht

Verfasst: 11. September 2013 19:16
von R.B.
Hallo,
müsste folgendes nicht funktionieren?

Code: Alles auswählen

// Base.h
#include <QThread>

class Base : public QThread
{ Q_OBJECT
  // ... blabla ...
};

// Derived.h
#include "Base.h"

class Derived : public QThread
{ Q_OBJECT
  // ... blabla ...

  public slots:
  void TestSlot();
};
Das Problem ist, zur Laufzeit erscheint auf der Konsole bei Aufruf der Funktion

Code: Alles auswählen

  ...
  Derived* pDerived=...;

  connect(this, SIGNAL(...), pDerived, SLOT(TestSlot()));
  ...
folgende Fehlermeldung:
"Object::connect: No such slot Base::TestSlot() ...."

Wieso wird der TestSlot() dabei falsch in der Basisklasse gesucht und nicht in der abgeleiteten Klasse, wo er definiert ist?

Re: Slot wird nicht in abgeleiteter Klasse gesucht

Verfasst: 11. September 2013 19:32
von Christian81
Die Fehlermeldung passt nicht zum Pseudo-Code da Derived nicht von Base abgeleitet ist. Da es kein richtiger Code ist kann man nicht genau sagen was falsch ist.

Re: Slot wird nicht in abgeleiteter Klasse gesucht

Verfasst: 12. September 2013 10:07
von R.B.
Stimmt, oben hätte es heißen müssen:

Code: Alles auswählen

class Derived : public Base
Ein kleines Beispielprogramm führt connect() scheinbar so aus, wie es sollte. Ein komplexeres nicht. Ich werde mal sehen, ob ich das hier vollständig darstellbar eingrenzen kann.

Re: Slot wird nicht in abgeleiteter Klasse gesucht

Verfasst: 12. September 2013 18:42
von Christian81
Dann hast Du sicher in Derived auch Q_OBJECT vergessen.

Re: Slot wird nicht in abgeleiteter Klasse gesucht

Verfasst: 19. September 2013 11:29
von R.B.
Hab ich nicht. Nachdem ich Q_OBJECT dort eingefügt hatte, warf der Compiler eine Serie unverständlicher Interna-Fehlermeldungen aus, daher wieder entfernt.

Das Problem scheint statt dessen entweder mit dem Kontext zusammenzuhängen, aus dem die connect()-Funktion aufgerufen wird oder mit der genauen Syntax, über die die Pointer (this, pDerived) an connect() übergeben werden. Eventuell wird hier das vorhandene C++-Spektrum, um Adressen anzugeben, nicht fehlerfrei unterstützt. Nachdem ich den connect()-Aufruf an eine andere Stelle im Programmcode verschoben habe, was auch die Syntax bei der Zeigerübergabe vereinfachte, funktionierte es plötzlich so wie es sollte.

Re: Slot wird nicht in abgeleiteter Klasse gesucht

Verfasst: 19. September 2013 18:07
von Christian81
connect() ist ein normaler Funktionsaufruf - was sollte da nicht unterstützt werden? Da war wohl eher irgendwo ein Typo.
Und ohne Q_OBJECT kann es definitiv nicht gehen.