Domanda

Ho un paio di caselle di controllo sulla mia forma, e io non voglio scrivere gestore di eventi separati per ciascuno, perché tutti attueranno la stessa logica. Invece voglio scrivere solo un gestore di eventi che saprà su cosa casella di controllo è stato fatto clic.

es. in Delphi posso usare in questo modo:

function click_handler(sender):
begin
    checked_box := sender.tag;
end;

Qui mi ricordo attuale numero di casella selezionata in alcune variabili (proprietà tag è stato impostato manualmente in Delphi IDE).

ho cercato e non riesco a trovare come posso implementare questo utilizzando Qt, perché i gestori di eventi non hanno argomento sender.

ho implementato in questo modo, ma non è conveniente:

# assign handlers (n assignments)
checkbox_1.clicked.connect(self.cb_1_click)
...
checkbox_<n>.clicked.connect(self.cb_<n>_click)

# separate handler for each check box (n functions, doing the same stupid work)
def cb_1_click:
    self.cb_click(sender=1)
...
def cb_<n>_click:
    self.cb_click(sender=n)

# main check box click logic (1 function)
def cb_click(sender):
    # do something common for all checkboxes

Grazie.

È stato utile?

Soluzione

È possibile utilizzare QObject :: mittente () negli slot per scoprire chi emesso il segnale.
Inoltre si potrebbe voler controllare QSignalMapper che è destinato proprio per risolvere questi problemi .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top