Seite 1 von 1

done()-Slot wird nicht erkannt

Verfasst: 25. März 2009 11:12
von pucky
Hallo zusammen,
ich habe ein kleines Problem. Und zwar habe ich gerade einen modalen Dialog erstellt und wollte ihn mit dem done()-Signal beenden. Der Konstruktor für diese Klasse sieht etwa so aus (schwer vereinfacht):

Code: Alles auswählen

SendWriteRegister::SendWriteRegister(QWidget *parent, int count)
    : QDialog(parent)
{
....
....
setLayout(mainLayout);

	connect(submit, SIGNAL(clicked()), this, SLOT(ReadOut()));
	connect(submit, SIGNAL(clicked()), this, SLOT(done(i)));
}
Aber ich bekomme zur Laufzeit die Fehlermeldung
Object::connect: No such slot SendWriteRegister::done(i)
In der Doku steht done() als virtual slot, also habe ich den slot selbst in meiner Klasse implemtiert, bekomme aber immer noch den gleichen Fehler.

Deshalb die Frage: was habe ich falsch verstanden oder nicht beachtet?

Gruss Pucky

Verfasst: 25. März 2009 11:17
von pm_Snake
du versuchst dem slot einen parameter mit zu geben ( i ).
das geht natürlich nicht, wenn er parameterlos deklariert ist.

Re: done()-Slot wird nicht erkannt

Verfasst: 25. März 2009 12:00
von pfid
pucky hat geschrieben:Hallo zusammen,
ich habe ein kleines Problem. Und zwar habe ich gerade einen modalen Dialog erstellt und wollte ihn mit dem done()-Signal beenden. Der Konstruktor für diese Klasse sieht etwa so aus (schwer vereinfacht):

Code: Alles auswählen

SendWriteRegister::SendWriteRegister(QWidget *parent, int count)
    : QDialog(parent)
{
....
....
setLayout(mainLayout);

	connect(submit, SIGNAL(clicked()), this, SLOT(ReadOut()));
	connect(submit, SIGNAL(clicked()), this, SLOT(done(i)));
}
Aber ich bekomme zur Laufzeit die Fehlermeldung
Object::connect: No such slot SendWriteRegister::done(i)
In der Doku steht done() als virtual slot, also habe ich den slot selbst in meiner Klasse implemtiert, bekomme aber immer noch den gleichen Fehler.

Deshalb die Frage: was habe ich falsch verstanden oder nicht beachtet?

Gruss Pucky
Signal und Slot müssen die gleichen Parameter haben.

Verfasst: 25. März 2009 12:06
von franzf
pm_Snake hat geschrieben:du versuchst dem slot einen parameter mit zu geben ( i ).
das geht natürlich nicht, wenn er parameterlos deklariert ist.
Nicht nur das. Er versucht einen Wert zu übergeben in dem connect. Ich nehm nämlich nicht an dass er irgendwo eine Klasse/typedef/enum/... namens "i" rumliegen hat.

Verfasst: 25. März 2009 17:05
von pucky
Naja, ich habe es auf jeden Fall auch mal ohne Parameter probiert.
In der Doku steht aber daß ein Parameter zu übergeben ist:
http://doc.trolltech.com/4.5/qdialog.html#done

Gruss pucky

Verfasst: 25. März 2009 17:44
von Christian81

Verfasst: 25. März 2009 20:05
von androphinx
ich würde mal denken, dass er schlicht und einfach mal wieder einen der standartfehler, die mit signals und slots in qt passieren, gemacht hat.
1. Du hast in deiner Klasse das kleine Q_OBJECT vergessen?
oder
2. Du hast den slot als normale funktion implementiert, und nicht als slot:

Code: Alles auswählen

protected slots:
  void einslot (void);
  void zweislot (int);
Mfg androphinx