connect: No such slot...

Alles rund um die Programmierung mit Qt
Antworten
Rumbert
Beiträge: 48
Registriert: 25. Mai 2009 18:28
Wohnort: Witten

connect: No such slot...

Beitrag 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:
chrislo1976
Beiträge: 105
Registriert: 24. Februar 2008 09:45

Beitrag 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
Rumbert
Beiträge: 48
Registriert: 25. Mai 2009 18:28
Wohnort: Witten

Beitrag 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?
chrislo1976
Beiträge: 105
Registriert: 24. Februar 2008 09:45

Beitrag 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
Rumbert
Beiträge: 48
Registriert: 25. Mai 2009 18:28
Wohnort: Witten

Beitrag 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?
chrislo1976
Beiträge: 105
Registriert: 24. Februar 2008 09:45

Beitrag von chrislo1976 »

Ich kenn da so ein Sprichwort:
Probieren geht über Studieren.
:wink:
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
Rumbert
Beiträge: 48
Registriert: 25. Mai 2009 18:28
Wohnort: Witten

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

Beitrag 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!
Chris81T
Beiträge: 82
Registriert: 4. Mai 2008 00:06
Wohnort: Urbar

Beitrag 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...
Antworten