Slot wird nicht in abgeleiteter Klasse gesucht

Alles rund um die Programmierung mit Qt
Antworten
R.B.
Beiträge: 4
Registriert: 20. September 2012 10:44

Slot wird nicht in abgeleiteter Klasse gesucht

Beitrag 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?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Slot wird nicht in abgeleiteter Klasse gesucht

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
R.B.
Beiträge: 4
Registriert: 20. September 2012 10:44

Re: Slot wird nicht in abgeleiteter Klasse gesucht

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Slot wird nicht in abgeleiteter Klasse gesucht

Beitrag von Christian81 »

Dann hast Du sicher in Derived auch Q_OBJECT vergessen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
R.B.
Beiträge: 4
Registriert: 20. September 2012 10:44

Re: Slot wird nicht in abgeleiteter Klasse gesucht

Beitrag 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.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Slot wird nicht in abgeleiteter Klasse gesucht

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten