Frage

Ich habe ein paar von Kontrollkästchen auf meiner Form, und ich will nicht separate Event-Handler für jeden schreiben, weil sie alle die gleiche Logik implementieren werden. Stattdessen will ich nur einen Event-Handler schreiben, die über wissen, was Checkbox angeklickt wurde.

z. in Delphi kann ich es auf diese Weise verwendet werden:

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

Hier erinnere mich aktuelle geprüft Chiffre in einigen Variablen (Tag-Eigenschaft wurde in Delphi IDE manuell eingestellt).

ich gesucht und nicht finden kann, wie ich diese mit Qt umsetzen kann, weil Ereignishandler nicht sender Argument hat.

Ich setzte es so, aber es ist nicht bequem:

# 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

Danke.

War es hilfreich?

Lösung

Sie können verwenden QObject :: Sender () in Schlitzen um herauszufinden, wer das Signal ausgesendet.
Sie können auch QSignalMapper prüfen wollen, die zur Lösung dieser Probleme genau bestimmt .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top