Qt: Signals and slots
Las librerías Qt proporcionan una API de programación con una orientación clara a las aplicaciones de escritorio. En este tipo de aplicaciones, es importante proveer de un mecanismo claro de comunicación entre objetos para simplificar la programación de aplicaciones. Me explico, en aplicaciones de escritorios, debemos tener alguna forma para conocer cuándo el usuario pulsa un botón, selecciona un ítem de un combo, o introduce texto en un control de texto. Las Qt proporcionan un mecanismo basado en "Signals" y "Slots".
La idea es, cuando se produce un evento en un objeto, éste puede emitir una señal. Esa señal se puede conectar con un slot (que no deja de ser un método de otro objeto) que respone a esa señal.
Para poder hacer uso de esta técnica, las clases que emitan señales o contengan slots, deben indicar que son objetos Qt, incluyendo la directiva Q_OBJECT en su declaración.
Así, por ejemplo, supongamos un objeto botón típico de aplicación, QPushButton. Cuando el usuario pulsa el botón, se produce una señal, clicked, que podemos conectar con un slot en el que respondemos a esa pulsación. Esa conexión se hace así
connect (botonQueSePulsa, SIGNAL(clicked()), objetoConElSlot, SLOT(tratamientoDeLaPulsacion()));
Las conexiones se pueden establecer y desasignar en tiempo de ejecución.
Además, es posible conectar una señar a varios slots. También es posible crear nuestros propios objetos que emitan nuestras propias señales (para emitir una señal basta emit(miSeñal()), definiendo miSeñal dentro de la declaración de la clase, bajo "signals:". Así se pueden extender los controles o los objetos adecuados fácilmente.
Entre las críticas que recibe este sistema es que no es un método compatible con Ansi C++ ... Y es cierto. Antes de compilar los fuentes, éstos deben ser analizados con una herramienta que proporcionan las Qt, que se llama "moc" y que se encarga de traducir esa jerga especial de "signals, slots, Q_OBJECT"... en código intermedio que realiza la comunicación. Sin embargo, hay que tener en cuenta que este sistema no implica que deban realizarse modificaciones en el compilador, incluyendo directivas de compilador (como sí hace Visual C++, Borland en sus C++ diferentes...). Así, puedes programar utilizando las Qt desde Visual C++, Borland C++ por ejemplo, o compilar con múltiples compiladores.
Sin trackbacks por el momento.
