Sur cette page

QSocketNotifier Class

La classe QSocketNotifier permet de surveiller l'activité d'un descripteur de fichier. Plus d'informations...

En-tête : #include <QSocketNotifier>
CMake : find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake : QT += core
Héritages : QObject

Types publics

enum Type { Read, Write, Exception }

Fonctions publiques

(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

Emplacements publics

void setEnabled(bool enable)

Signaux

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

Fonctions protégées réimplémentées

virtual bool event(QEvent *e) override

Description détaillée

Le QSocketNotifier permet d'intégrer la boucle d'événements de Qt avec d'autres boucles d'événements basées sur des descripteurs de fichiers. L'action du descripteur de fichier est détectée dans la boucle d'événements principale de Qt (QCoreApplication::exec()).

Une fois que vous avez ouvert un périphérique à l'aide d'une API de bas niveau (généralement spécifique à une plate-forme), vous pouvez créer un notificateur de socket pour surveiller le descripteur de fichier. Si le descripteur est transmis au constructeur du notificateur, le notificateur de socket est activé par défaut, c'est-à-dire qu'il émet le signal activated() chaque fois qu'un événement de socket correspondant à son type se produit. Connectez le signal activated() au slot que vous souhaitez voir appelé lorsqu'un événement correspondant au type de votre notificateur de socket se produit.

Vous pouvez créer un notificateur de socket sans lui attribuer de descripteur. Dans ce cas, vous devez appeler la fonction setSocket() après avoir obtenu le descripteur.

Il existe trois types de notificateurs de socket : read, write et exception. Le type est décrit par l'enum Type et doit être spécifié lors de la construction du notificateur de socket. Après la construction, il peut être déterminé à l'aide de la fonction type(). Notez que si vous devez surveiller à la fois les lectures et les écritures pour le même descripteur de fichier, vous devez créer deux notificateurs de socket. Notez également qu'il n'est pas possible d'installer deux notificateurs de socket du même type (Read, Write, Exception) sur le même socket.

La fonction setEnabled() vous permet de désactiver et d'activer le notificateur de sockets. Il est généralement conseillé d'activer ou de désactiver explicitement le notificateur de socket, en particulier pour les notificateurs d'écriture. Un notificateur désactivé ignore les événements de socket (ce qui revient à ne pas créer le notificateur de socket). Utilisez la fonction isEnabled() pour déterminer l'état actuel du notificateur.

Enfin, vous pouvez utiliser la fonction socket() pour récupérer l'identifiant de la socket. Bien que la classe s'appelle QSocketNotifier, elle est normalement utilisée pour d'autres types de périphériques que les sockets. QTcpSocket et QUdpSocket fournissent des notifications par le biais de signaux, il n'est donc normalement pas nécessaire d'utiliser un QSocketNotifier sur eux.

Voir aussi QFile, QProcess, QTcpSocket, et QUdpSocket.

Documentation sur les types de membres

enum QSocketNotifier::Type

Cette énumération décrit les différents types d'événements qu'un notificateur de sockets peut reconnaître. Le type doit être spécifié lors de la construction du notificateur de socket.

Notez que si vous avez besoin de surveiller à la fois les lectures et les écritures pour le même descripteur de fichier, vous devez créer deux notificateurs de socket. Notez également qu'il n'est pas possible d'installer deux notificateurs de socket du même type (Read, Write, Exception) sur le même socket.

ConstanteValeurDescription
QSocketNotifier::Read0Il y a des données à lire.
QSocketNotifier::Write1Des données peuvent être écrites.
QSocketNotifier::Exception2Une exception s'est produite. Nous vous déconseillons d'utiliser cette fonction.

Voir également QSocketNotifier() et type().

Documentation sur les fonctions membres

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

Construit un notificateur de socket avec l'argument type qui n'a pas de descripteur assigné. L'argument parent est transmis au constructeur de QObject.

Appelez la fonction setSocket() pour définir le descripteur pour la surveillance.

Cette fonction a été introduite dans Qt 6.1.

Voir aussi setSocket(), isValid() et isEnabled().

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

Construit un notificateur de socket avec l'adresse parent. Il active l'adresse socket et surveille les événements de l'adresse type.

Il est généralement conseillé d'activer ou de désactiver explicitement le notificateur de socket, en particulier pour les notificateurs d'écriture.

Note pour les utilisateurs de Windows : La socket passée à QSocketNotifier deviendra non bloquante, même si elle a été créée en tant que socket bloquante.

Voir aussi setEnabled() et isEnabled().

[virtual noexcept] QSocketNotifier::~QSocketNotifier()

Détruit ce notificateur de socket.

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

Ce signal est émis chaque fois que le notificateur de socket est activé et qu'un événement de socket correspondant à son type se produit.

L'identifiant de la prise est transmis dans le paramètre socket.

Remarque : il s'agit d'un signal privé. Il peut être utilisé dans les connexions de signaux mais ne peut pas être émis par l'utilisateur.

Remarque : ce signal est surchargé. Pour se connecter à ce signal :

// 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 */ });
Pour plus d'exemples et d'approches, voir connecting to overloaded signals (connexion à des signaux surchargés).

Voir aussi type() et socket().

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

Réimplémente : QObject::event(QEvent *e).

bool QSocketNotifier::isEnabled() const

Renvoie true si le notificateur est activé ; sinon, renvoie false.

Voir aussi setEnabled().

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

Renvoie true si le notificateur est valide (c'est-à-dire qu'un descripteur lui a été attribué) ; sinon, renvoie false.

Cette fonction a été introduite dans Qt 6.1.

Voir aussi setSocket().

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

Si enable est vrai, le notificateur est activé, sinon il est désactivé.

Lorsque le notificateur est activé, il émet le signal activated() chaque fois qu'un événement de socket correspondant à son type se produit. Lorsqu'il est désactivé, il ignore les événements de socket (ce qui revient à ne pas créer le notificateur de socket).

Les notificateurs d'écriture doivent normalement être désactivés immédiatement après l'émission du signal activated()

Voir aussi isEnabled() et activated().

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

Affecte le site socket à ce notificateur.

Note : Le notificateur sera désactivé comme effet de bord et devra être réactivé.

Cette fonction a été introduite dans Qt 6.1.

Voir aussi socket(), setEnabled(), et isValid().

qintptr QSocketNotifier::socket() const

Renvoie l'identifiant de socket attribué à cet objet.

Voir aussi setSocket(), isValid(), et type().

QSocketNotifier::Type QSocketNotifier::type() const

Renvoie le type d'événement de socket spécifié dans le constructeur.

Voir aussi 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.