Pregunta

Tengo un par de casillas de verificación en mi formulario y no quiero escribir un controlador de eventos separado para cada una, porque todas implementarán la misma lógica.En lugar de eso, quiero escribir solo un controlador de eventos que sepa en qué casilla se hizo clic.

P.ej.en Delphi puedo usarlo de esta manera:

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

Aquí recuerdo el número de casilla marcada actual en alguna variable (la propiedad de etiqueta se configuró manualmente en Delphi IDE).

Busqué y no encuentro cómo puedo implementar esto usando Qt, porque los controladores de eventos no tienen sender argumento.

Lo implementé así, pero no es 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

Gracias.

¿Fue útil?

Solución

Es posible usar QObject :: remitente () en las ranuras para averiguar quién emite la señal.
También es posible que desee echa un vistazo a QSignalMapper que está destinada precisamente para resolver estos problemas .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top