Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.

How to Use Signals and Slots/es

From Qt Wiki
Jump to navigation Jump to search
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