How to Use Signals and Slots/es

From Qt Wiki
< How to Use Signals and Slots
Revision as of 12:22, 17 April 2015 by AutoSpider (talk | contribs) (Remove non-functioning "toc" command)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.


Español English 简体中文

Cómo Usar Señales ("Signals") y Ranuras ("Slots")?

Introducción

Recuerdas el viejo call-back del sistema X-Window? Generalmente este no se escribe seguro y flexible. Hay muchos problemas con ellos. Qt oferta una nueva gestión de eventos del sistema - las conexiones signal-slot. Imagínese un despertador. Cuando la alarma está sonando, está enviando la señal (emitting). Y tú estás actuando como una ranura.

La traducción de "slot" es ranura pero en realidad se refiere a una acción a tomar dependiendo de la señal que se emita. Hecha esta aclaración, proseguimos…

  • Cada clase QObject puede tener tantas señales como desees.
  • Solo puedes emitir una señal desde la clase donde esta se encuentra.
  • Puedes conectar una señal con otra (crear una cadena de señales).
  • Cada una de estas señales y ranuras pueden tener conexiones ilimitadas entre si.
  • ATENCIÓN! No puedes asignar valores por defecto a los atributos de una ranura. ej
    void miFuncion(int i = 0);
    

Conección

Puedes conectar una señal a través de esta forma:

QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method);

Tienes que vincular const char * signal y const char * method a un SIGNAL () y SLOT() macro respectivamente.

Y también puedes desconectar la señal de la ranura:

QObject::disconnect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method);

Más profundo

Los widgets emiten una señal cuando ocurre un evento. Por ejemplo, un botón emite una señal "clicked" cuando este es cliqueado. Un desarrollador puede escoger conectar la señal a una ranura llamando a la función

connect()

para relacionarlos entre si. El mecanismo de señales y ranuras de Qt no requiere de clases para tener conocimiento entre ellas, lo que hace mucho más fácil desarrollar alta reutilización de las mismas. Como señales y ranuras son tipeado-seguro (type-safe), si hubiera algún error, estos serían reportados como alertas y no causarían una interrupción total de la aplicación. Por ejemplo, si una señal de un botón de Cerrar

clicked()

esta conectada a la ranura

quit()

, el click del usuario en Cerrar haría que la aplicación cerrara completamente, valga la redundancia. El código se escribiría de esta forma:

connect(button, SIGNAL (clicked()), qApp, SLOT (quit()));<code>

Las conexiones pueden ser añadidas o eliminadas en cualquier momento durante la ejecución de una aplicación Qt, pueden ser configuradas de forma que se ejecuten cuando se emite una señal o ponerse en cola para su posterior ejecución, incluso también entre objetos en diferentes hilos.

El mecanismo de señales y ranuras es implementado por C+''. La implementación usa el preprocesador de C''+ y <code>moc

, el compilador Meta-Objeto incluido con Qt. La generación de código se realiza de forma automática por substitución: Qt's-Build-System. Los desarrolladores no tienen que modificar o incluso ver el código generado.

Además de manejar las señales y las ranuras, el compilador de Meta-Objetos de Qt apoya mecanismo de traducción, su sistema de propiedad, y su amplia información de tipado en tiempo de ejecución. También hace introspección en tiempo de ejecución de programas C++ de una manera que funciona en todas las plataformas soportadas.

Vea también