Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I connect the pressed() signal of 32 buttons to a single function without declaring 32 slots?

Tags:

qt

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.

like image 696
yan bellavance Avatar asked Nov 26 '09 01:11

yan bellavance


2 Answers

Use the QSignalMapper class. The documentation - http://doc.qt.io/qt-5/qsignalmapper.html - has an example pretty close to what you want.

like image 168
rohanpm Avatar answered Nov 19 '22 10:11

rohanpm


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.

like image 40
rpg Avatar answered Nov 19 '22 10:11

rpg