Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

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?


  • Moderators

    @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)



  • @J.Hilk

    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


  • Moderators

    @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



  • @J.Hilk

    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.


  • Moderators

    @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 diesem

    test1 = QObject::connect(ui->pushButtonPrintLS11, SIGNAL(clicked()),this, SLOT(print0()));
    


  • @J.Hilk
    Deine Idee ist echt Genial Vielen dank


Log in to reply