How to Use Signals and Slots/es: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
[[Category:QtDevelopmentSpanish::General]]<br />[[Category:HowTo]]<br />[[Category:Snippets]]<br />[[Category:Tutorial]]<br />[[Category:Learning]]<br />[[Category:Spanish]] | |||
= | [toc align_right="yes&quot; depth="3&quot;] | ||
'''Español''' [[How_to_Use_Signals_and_Slots|English]] [[How_to_Use_Signals_and_Slots_SimplifiedChinese|简体中文]] | |||
= Cómo Usar Señales ("Signals&quot;) y Ranuras ("Slots&quot;)? = | |||
La traducción de | == 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&quot; 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. | * Cada clase QObject puede tener tantas señales como desees. | ||
Line 13: | Line 17: | ||
* Puedes conectar una señal con otra (crear una cadena de señales). | * 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. | * 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'' <code&gt;void miFuncion(int i = 0);</code&gt; | ||
== Conección == | |||
Puedes conectar una señal a través de esta forma:<br /><code><br />QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method);<br /></code><br />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:<br /><code><br />QObject::disconnect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method);<br /></code> | |||
== Más profundo == | |||
Los widgets emiten una señal cuando ocurre un evento. Por ejemplo, un botón emite una señal "clicked&quot; cuando este es cliqueado. Un desarrollador puede escoger conectar la señal a una ranura llamando a la función <code&gt;connect()</code&gt; 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 <code&gt;clicked()</code&gt; esta conectada a la ranura <code&gt;quit()</code&gt;, 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: | |||
<code>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. | 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+ | El mecanismo de señales y ranuras es implementado por C+''. La implementación usa el preprocesador de C''+ y <code&gt;moc&lt;/code&gt;, 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. | 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== | == Vea también == | ||
Revision as of 09:51, 24 February 2015
[toc align_right="yes" depth="3"]
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 <code>void miFuncion(int i = 0);</code>
Conección
Puedes conectar una señal a través de esta forma:
<br />QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method);<br />
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:
<br />QObject::disconnect ( const QObject * sender, const char * signal, const QObject * receiver, const char * method);<br />
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 <code>connect()</code> 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 <code>clicked()</code> esta conectada a la ranura <code>quit()</code>, 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()));
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</code>, 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