Seite 1 von 1

connect: No such slot...

Verfasst: 26. Februar 2010 15:45
von Rumbert
Hallo NG,

ich bin etwas ratlos, da ein simpler connect nicht klappt...

Code: Alles auswählen

// cpp

PluginA::Layer::Layer(QString name, bool single)
: GLE::Extension(name)
{
	connect (Client::Instance(), SIGNAL(signalTest(int)),
			this, SLOT(slotTest(int) );
}

void PluginA::Layer::slotTest(int n)
{
	renderMode = n;
}



// h

namespace PluginA
{
	 
	class Layer : public GLE::Extension
	{

	public:
		Layer(QString name, bool single = true);
		virtual ~Layer();

        public slots:
		void	slotTest(int n);
}
Nun bekomme ich beim connect die Meldung:
Object::connect: No such slot GLE::Extension::slotTest(int) in ... PluginALayer.cpp:11

Klar hat die Basisklasse nicht den Slot sondern nur die abgeleitete... aber warum sucht QT beim connect in der Basisklasse.

Wahrscheinlich ist der Fehler trivial nur ich seh in seit 45 Minuten nicht :evil:

Verfasst: 26. Februar 2010 15:52
von chrislo1976
Hallo!

Ich kann mir nicht vorstellen dass das so gehen kann!
Wie soll der moc anhand der Basisklasse wissen welche Klasse davon abgeleitet werden wird?

Gruß,
Christian

Verfasst: 26. Februar 2010 16:23
von Rumbert
äh irgendwie versteh ich die Antwort jetzt nicht. Ich möchte in meinem Konstruktor nur mit dem SLOT test connecten.

An Hand der Ausgabe von QT "No such slot GLE::Extension::slotTest(int)" habe ich geschlossen dass er in der Basis klasse sucht..

Aber der connect steht doch in der Klasse Layer.

Was meinst Du kann daran nicht gehen?

Verfasst: 26. Februar 2010 16:30
von chrislo1976
Sorry!

Man sollte erst genau lesen bevor man was antwortet... :oops:

Aber, man braucht meines Wissens das Q_OBJECT-Makro in einer Klasse die mit Signals und Slots arbeitet.

Oder überseh ich das jetzt auch wieder?!

Gruß
Christian

Verfasst: 26. Februar 2010 16:40
von Rumbert
Das Q_OBJECT macro steht da wirklich nicht :-) , aber das ist Bestandteil der Basis-Klasse von der ich Ableite. Somit sollte das doch reichen, oder?

Verfasst: 26. Februar 2010 16:42
von chrislo1976
Ich kenn da so ein Sprichwort:
Probieren geht über Studieren.
:wink:

Verfasst: 26. Februar 2010 16:45
von franzf
Rumbert hat geschrieben:Das Q_OBJECT macro steht da wirklich nicht :-) , aber das ist Bestandteil der Basis-Klasse von der ich Ableite. Somit sollte das doch reichen, oder?
In jedem Tutorial steht "you need the Q_OBJECT Makro".
Das Macro macht nämlich mehr als nur da stehen!

Verfasst: 26. Februar 2010 16:47
von upsala

Code: Alles auswählen

The Q_OBJECT macro must appear in the private section of a class definition that declares its own signals and slots or that uses other services provided by Qt's meta-object system.

[gelöst] connect: No such slot...

Verfasst: 27. Februar 2010 11:20
von Rumbert
Ja, da muss dann doch tatsächlich auch in den abgeleiteten Klasse das Q_OBJECT macro hin. Komisch ich war so überzeugt, dass es in der Basisklasse ausreicht und der MOC dann abgeleitete Klasse parst.

Vielen Dank!

Verfasst: 27. Februar 2010 13:57
von Chris81T
Ja, da muss dann doch tatsächlich auch in den abgeleiteten Klasse das Q_OBJECT macro hin
Das ist richtig und man sollte es auch so generell handhaben. Anderer Fall, wo es wichtig ist:
Falls man mal die QObject::findChildren<T>() nutzen möchte und in seinen Subklassen das Macro nicht pflegt, kommt es zu einem ganz anderem Ergebnis, als man erwartet...