Pergunta

Eu tenho um par de caixas de seleção no meu formulário, e eu não quero escrever manipulador de eventos em separado para cada um, porque todos eles vão implementar a mesma lógica. Em vez disso eu quero escrever apenas um manipulador de eventos que vai saber sobre o caixa foi clicado.

por exemplo. em Delphi posso usá-lo desta maneira:

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

Aqui eu me lembro número caixa marcada atual em alguma variável (propriedade tag foi criado manualmente em Delphi IDE).

Eu procurei e não consigo encontrar como eu posso implementar isso usando Qt, porque manipuladores de eventos não têm argumento sender.

Eu implementei-lo assim, mas não é 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

Obrigado.

Foi útil?

Solução

Você pode usar QObject :: remetente () em slots para descobrir quem emitiu o sinal.
Além disso, você pode querer verificar para fora QSignalMapper que se destina exatamente para resolver estes problemas .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top