En esta página

QSocketNotifier Class

La clase QSocketNotifier proporciona soporte para monitorizar la actividad en un descriptor de fichero. Más...

Cabecera: #include <QSocketNotifier>
CMake: find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
Hereda: QObject

Tipos Públicos

enum Type { Read, Write, Exception }

Funciones Públicas

(since 6.1) QSocketNotifier(QSocketNotifier::Type type, QObject *parent = nullptr)
QSocketNotifier(qintptr socket, QSocketNotifier::Type type, QObject *parent = nullptr)
virtual ~QSocketNotifier()
bool isEnabled() const
(since 6.1) bool isValid() const
(since 6.1) void setSocket(qintptr socket)
qintptr socket() const
QSocketNotifier::Type type() const

Ranuras Públicas

void setEnabled(bool enable)

Señales

void activated(QSocketDescriptor socket, QSocketNotifier::Type type)

Funciones Protegidas Reimplementadas

virtual bool event(QEvent *e) override

Descripción detallada

El QSocketNotifier hace posible integrar el bucle de eventos de Qt con otros bucles de eventos basados en descriptores de fichero. La acción del descriptor de archivo se detecta en el bucle de eventos principal de Qt (QCoreApplication::exec()).

Una vez que has abierto un dispositivo utilizando una API de bajo nivel (normalmente específica de la plataforma), puedes crear un notificador de socket para monitorizar el descriptor de fichero. Si se pasa el descriptor al constructor del notificador, el notificador de socket estará habilitado por defecto, es decir, emitirá la señal activated() cada vez que se produzca un evento de socket correspondiente a su tipo. Conecta la señal activated() a la ranura que quieras que sea llamada cuando se produzca un evento correspondiente al tipo de tu notificador de socket.

Puedes crear un notificador de socket sin descriptor asignado. En este caso, deberá llamar a la función setSocket() después de haber obtenido el descriptor.

Existen tres tipos de notificadores de socket: lectura, escritura y excepción. El tipo se describe mediante el enum Type, y debe especificarse al construir el notificador de socket. Después de la construcción se puede determinar utilizando la función type(). Ten en cuenta que si necesitas monitorizar tanto lecturas como escrituras para el mismo descriptor de fichero, debes crear dos notificadores de socket. Observe también que no es posible instalar dos notificadores de socket del mismo tipo (Read, Write, Exception) en el mismo socket.

La función setEnabled() permite deshabilitar y habilitar el notificador de socket. Generalmente es aconsejable habilitar o deshabilitar explícitamente el notificador de socket, especialmente para los notificadores de escritura. Un notificador deshabilitado ignora los eventos de socket (el mismo efecto que no crear el notificador de socket). Utilice la función isEnabled() para determinar el estado actual del notificador.

Finalmente, puedes usar la función socket() para recuperar el identificador del socket. Aunque la clase se llama QSocketNotifier, normalmente se utiliza para otros tipos de dispositivos que no sean sockets. QTcpSocket y QUdpSocket proporcionan notificación a través de señales, por lo que normalmente no hay necesidad de utilizar un QSocketNotifier en ellos.

Ver también QFile, QProcess, QTcpSocket, y QUdpSocket.

Documentación de tipos de miembros

enum QSocketNotifier::Type

Este enum describe los distintos tipos de eventos que puede reconocer un notificador de socket. El tipo debe especificarse al construir el notificador de socket.

Tenga en cuenta que si necesita monitorizar tanto lecturas como escrituras para el mismo descriptor de fichero, debe crear dos notificadores de socket. Ten en cuenta también que no es posible instalar dos notificadores de socket del mismo tipo (Lectura, Escritura, Excepción) en el mismo socket.

ConstanteValorDescripción
QSocketNotifier::Read0Hay datos para leer.
QSocketNotifier::Write1Se pueden escribir datos.
QSocketNotifier::Exception2Se ha producido una excepción. Se desaconseja su uso.

Véase también QSocketNotifier() y type().

Documentación de las funciones miembro

[explicit, since 6.1] QSocketNotifier::QSocketNotifier(QSocketNotifier::Type type, QObject *parent = nullptr)

Construye un notificador de socket con el type dado que no tiene ningún descriptor asignado. El argumento parent se pasa al constructor de QObject.

Llama a la función setSocket() para establecer el descriptor a monitorizar.

Esta función se introdujo en Qt 6.1.

Véase también setSocket(), isValid() y isEnabled().

QSocketNotifier::QSocketNotifier(qintptr socket, QSocketNotifier::Type type, QObject *parent = nullptr)

Construye un notificador de socket con el parent dado. Habilita el socket, y está atento a los eventos del type dado.

Generalmente es aconsejable habilitar o deshabilitar explícitamente el notificador de socket, especialmente para los notificadores de escritura.

Nota para usuarios de Windows: El socket pasado a QSocketNotifier se convertirá en no bloqueante, incluso si fue creado como un socket bloqueante.

Véase también setEnabled() y isEnabled().

[virtual noexcept] QSocketNotifier::~QSocketNotifier()

Destruye este notificador de socket.

[private signal] void QSocketNotifier::activated(QSocketDescriptor socket, QSocketNotifier::Type type)

Esta señal se emite cada vez que se activa el notificador de socket y se produce un evento de socket correspondiente a su type.

El identificador del socket se pasa en el parámetro socket.

Nota: Se trata de una señal privada. Puede ser utilizada en conexiones de señal pero no puede ser emitida por el usuario.

Nota: Esta señal está sobrecargada. Para conectarse a esta señal:

// Connect using qOverload:
connect(socketNotifier, qOverload(&QSocketNotifier::activated),
        receiver, &ReceiverClass::slot);

// Or using a lambda:
connect(socketNotifier, qOverload(&QSocketNotifier::activated),
        this, [](QSocketDescriptor socket, QSocketNotifier::Type type) { /* handle activated */ });
Para más ejemplos y enfoques, consulte la conexión a señales sobrecargadas.

Véase también type() y socket().

[override virtual protected] bool QSocketNotifier::event(QEvent *e)

Reimplementa: QObject::event(QEvent *e).

bool QSocketNotifier::isEnabled() const

Devuelve true si el notificador está habilitado; en caso contrario devuelve false.

Véase también setEnabled().

[since 6.1] bool QSocketNotifier::isValid() const

Devuelve true si el notificador es válido (es decir, tiene un descriptor asignado); en caso contrario devuelve false.

Esta función se introdujo en Qt 6.1.

Véase también setSocket().

[slot] void QSocketNotifier::setEnabled(bool enable)

Si enable es verdadero, el notificador está habilitado; en caso contrario, el notificador está deshabilitado.

Cuando el notificador está habilitado, emite la señal activated() cada vez que se produce un evento de socket correspondiente a su type. Cuando está deshabilitado, ignora los eventos de socket (el mismo efecto que no crear el notificador de socket).

Normalmente, los notificadores de escritura deben desactivarse inmediatamente después de que se haya emitido la señal activated().

Véase también isEnabled() y activated().

[since 6.1] void QSocketNotifier::setSocket(qintptr socket)

Asigna la dirección socket a este notificador.

Nota: El notificador se deshabilitará como efecto secundario y deberá volver a habilitarse.

Esta función se introdujo en Qt 6.1.

Véase también socket(), setEnabled(), y isValid().

qintptr QSocketNotifier::socket() const

Devuelve el identificador de socket asignado a este objeto.

Véase también setSocket(), isValid() y type().

QSocketNotifier::Type QSocketNotifier::type() const

Devuelve el tipo de evento de socket especificado al constructor.

Véase también socket().

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.