Como posso ligar o sinal pressionado () de 32 botões para uma única função sem declarar 32 slots?
-
05-07-2019 - |
Pergunta
Eu tenho um widget e dentro dela estão 32 botões. Eu preciso ligar o sinal de cada botão pressionado () para um slot, a fim de chamar uma função que é parâmetros dependem de qual botão eu tenho pressionado. Agora eu fiz isso através da adição de 32 slots na forma de on_QPushButtonName_pressed () mas isso é um monte de slots. Eu queria saber se existe outra maneira que eu poderia fazê-lo, que é menor. Eu tenho feito algo semelhante, mas eu estava trabalhando com widgets personalizados para que eu pudesse apenas criar um novo sinal no código da minha classe, mas eu gostaria de evitar a criação de um widget personalizado para apenas um único botão.
Solução
Use o QSignalMapper. A documentação - http://doc.qt.io/qt-5/qsignalmapper.html - tem um exemplo muito perto do que você quer
.Outras dicas
Outra possibilidade:. Criação de apenas um slot, chamando sender()
e ligar o resultado
Como Rohan mencionado, QSignalMapper é a solução recomendada, uma vez que o remetente () é um bocado de um hack. Sua vantagem é que é mais fácil de usar.