Important: Please read the Qt Code of Conduct -

Connecting signals and slots with different parameters: Is it possible?

  • HI,
    I wish to make a connection, and I'm aware that they both must have the same type of parameter in order to work. My question is:
    Is there a way, or workaround, to this issue?
    In my project, I want to connect a simple valuechanged signal to a a slot that receives 3 QWidet parameters.
    This is the code in question:

    //OperatorLogged is a valuechanged signal, nothing weird.
    connect(login, SIGNAL(operatorLogged(int)),
                this, SLOT(createOperatorInterface(QWidget*, QWidget*, QWidget*)));
    //createOperatorInterface takes the QWidget arguments and adds them to "this" stacked layout. "This" being  the main widget, by the way.

    I would also like to know if using the main.cpp is the best practice, as I was taught in OOP, to work with my code. The whole issue comes from me trying to work in the main.cpp like this:

    #include "mainwidget.h"
    #include "qlogin.h"
    #include "qdispense.h"
    #include "qdispensedisplay.h"
    #include "qresult.h"
    #include <QApplication>
    #include <QCalendarWidget>
    int main(int argc, char *argv[])
        QApplication Skylord(argc, argv);
        mainWidget mwMainWidget;;
        QLogin *loginWidget = new QLogin;
        QDispense *dispenseWidget = new QDispense;
        QDispenseDisplay *dispenseDisplayWidget = new QDispenseDisplay;
        QResult *resultWidget = new QResult;
        return Skylord.exec();

    Thanks in advance.

  • @Jorge


    How would your slot know what arguments to use, i.e. which pointers to QWidgets?



  • Lifetime Qt Champion


    Short answer: no

    The slot signature must either have the same number or less parameters than the signal and the type must be the same.