qtqsignalmapperqt-slot

Passing an argument to a slot


I want to override mouseReleaseEvent with a bunch of QActions and QMenus...

connect(action1, SIGNAL(triggered()), this, SLOT(onStepIncreased()));

connect(action5, SIGNAL(triggered()), this, SLOT(onStepIncreased()));

connect(action10, SIGNAL(triggered()), this, SLOT(onStepIncreased()));

connect(action25, SIGNAL(triggered()), this, SLOT(onStepIncreased()));

connect(action50, SIGNAL(triggered()), this, SLOT(onStepIncreased()));

So I want to pass an argument to the slot onStepIncreased (as you can imagine they are 1,5,10,25,50). Do you know how I can do it?


Solution

  • Use QSignalMapper. Like this:

    QSignalMapper* signalMapper = new QSignalMapper (this) ;
    connect (action1, SIGNAL(triggered()), signalMapper, SLOT(map())) ;
    connect (action5, SIGNAL(triggered()), signalMapper, SLOT(map())) ;
    connect (action10, SIGNAL(triggered()), signalMapper, SLOT(map())) ;
    connect (action25, SIGNAL(triggered()), signalMapper, SLOT(map())) ;
    connect (action50, SIGNAL(triggered()), signalMapper, SLOT(map())) ;
    
    signalMapper -> setMapping (action1, 1) ;
    signalMapper -> setMapping (action5, 5) ;
    signalMapper -> setMapping (action10, 10) ;
    signalMapper -> setMapping (action25, 25) ;
    signalMapper -> setMapping (action50, 50) ;
    
    connect (signalMapper, SIGNAL(mapped(int)), this, SLOT(onStepIncreased(int))) ;