Come posso collegare il segnale premuto () di 32 pulsanti a una singola funzione senza dichiarare 32 slot?
-
05-07-2019 - |
Domanda
Ho un widget e al suo interno ci sono 32 pulsanti. Devo collegare il segnale premuto () di ciascun pulsante a uno slot per poter chiamare una funzione i cui parametri dipendono dal pulsante che ho premuto. In questo momento l'ho fatto aggiungendo 32 slot sotto forma di on_QPushButtonName_pressed () ma questo è un sacco di slot. Mi chiedevo se esiste un altro modo per farlo che è più piccolo. Ho fatto qualcosa di simile ma stavo lavorando con widget personalizzati in modo da poter creare un nuovo segnale nel codice della mia classe, ma vorrei evitare di creare un widget personalizzato per un solo pulsante.
Soluzione
Usa la classe QSignalMapper. La documentazione - http://doc.qt.io/qt-5/qsignalmapper.html - ha un esempio abbastanza vicino a quello che vuoi.
Altri suggerimenti
Un'altra possibilità: creare un solo slot, chiamare mittente ()
e attivare il risultato.
Come menzionato da Rohan, QSignalMapper è la soluzione consigliata, poiché mittente () è un po 'un trucco. Il suo vantaggio è che è più facile da usare.