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

StackOverflow https://stackoverflow.com/questions/1801167

  •  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.

Was it helpful?

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top