Solved Das Connect beim Signal und Slot gibt mir eine false zurück warum?
-
Hallo Zusammen,
folgende Connect beim Signal und Slot habe ich :
bool test = QObject::connect(ui.pushButtonPrint, SIGNAL(clicked()), SLOT(print(0)));
Meine Frage gibt mir das connect hier eine false zurück?
Die Deklaration des Slots sieht so aus :#ifndef QT_NO_PRINTER void print(int i); #endif
Die Implentiereung ist erstmal irrelevant.
Danke
-
Sollte das Slot die gleiche Signature wie das Signal?
-
@Galilio said in Das Connect beim Signal und Slot gibt mir eine false zurück warum?:
QObject::connect(ui.pushButtonPrint, SIGNAL(clicked()), SLOT(print(0)));
Moin,
QObject::connect erwartet mindesten 4 argumente, maximal 5
Das von dir angebene Beispiel hat allerdings nur 3, und die Argumente vom signal und slot müssen übereinstimmen, clicked is void aber print scheint einen interger zu erwarten.
QObject::connect(Sender, SIGNAL, Empfänger, SLOT, Verbindungsart);
Wenn du Qt5 verwendest kannst hier nen Lambda verwenden, um die ganzen Probleme zu umgehen:
QObject::connect(ui->pushButtonPrint, &QPushButton::clicked, this, [=]{print(0);});
wenn ui nen pointer ist, wovon ich hier mal ausgehe muss du es dereferenzieren btw den -> operator verwenden
-
Hallo und danke für die Antwort.
das dritter parameter war einen Tippfehler.
Ich benutze Qt 4.8 (es handelt sich um einen bestehende Projekt) -
wenn ich auch so schreibe :
test1 = QObject::connect(ui.pushButtonPrintLS11, SIGNAL(clicked()),this, SLOT(print(0)));
Das Connect gibt mir auch weiterhin einen false Zurück
-
@Galilio
@J.Hilk said in Das Connect beim Signal und Slot gibt mir eine false zurück warum?:die Argumente vom signal und slot müssen übereinstimmen, clicked is void aber print scheint einen interger zu erwarten.
Du kannst dem connect keine eigenen Argumente mit geben, in diesem fall
0
-
Mir geht darum, dass ich das print nicht mehr mal implementiere.
Das print ist eigentlich gleich.
Nur das PrintObject ist anders, aber was die PrintFunktion macht ist also gleich. -
@Galilio
du kannst nur Funktionen die als SLOT oder als SIGNAL gekennzeichnet sind, in deinem header, verbinden.Beispiel:
//.h private slots: void print0(){print(0);}//Slot der kein Argument will //.cpp test1 = QObject::connect(ui.pushButtonPrintLS11, SIGNAL(clicked()),this, SLOT(print0()));
falls
ui
ein pointer ist musst du das connect nochmal abändern zu diesemtest1 = QObject::connect(ui->pushButtonPrintLS11, SIGNAL(clicked()),this, SLOT(print0()));
-
@J.Hilk
Deine Idee ist echt Genial Vielen dank