How can I connect the pressed() signal of 32 buttons to a single function without declaring 32 slots?
-
05-07-2019 - |
Question
I have a widget and inside it are 32 buttons. I need to connect each button's pressed() signal to a slot in order to call a function who's parameters depend on which button I have pressed. Right now I did that by adding 32 slots in the form of on_QPushButtonName_pressed() but thats a lot of slots. I was wondering if there is another way I could do it that is smaller. I have done something similar but I was working with custom widgets so I could just create a new signal in the code of my class but I would like to avoid creating a custom widget for just a single button.
Solution
Use the QSignalMapper class. The documentation - http://doc.qt.io/qt-5/qsignalmapper.html - has an example pretty close to what you want.
OTHER TIPS
Another possibility: creating just one slot, calling sender()
and switching on the result.
As Rohan mentioned, QSignalMapper is the recommended solution, since sender() is a bit of a hack. Its advantage is that it's easier to use.