Question

J'ai deux ou trois cases à cocher sur ma forme, et je ne veux pas écrire gestionnaire d'événements séparés pour chacun, car ils ont tous exécuteront la même logique. Au lieu de cela, je veux écrire un seul gestionnaire d'événements qui saura à ce que la case a été cliqué.

par exemple. à Delphes je peux l'utiliser de cette façon:

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

Ici, je me souviens numéro de la case cochée dans une variable (propriété de balise a été définie manuellement dans Delphi IDE).

Je cherchai et ne peut pas trouver comment je peux mettre en œuvre cette aide de Qt, car les gestionnaires d'événements n'ont pas l'argument sender.

Je mis en œuvre comme ça, mais ce n'est pas pratique:

# 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

Merci.

Était-ce utile?

La solution

Vous pouvez utiliser QObject :: sender () dans les fentes pour savoir qui a émis le signal.
Aussi, vous pouvez consulter QSignalMapper qui vise précisément pour résoudre ces problèmes .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top