QSocketNotifier Class

Die Klasse QSocketNotifier bietet Unterstützung für die Überwachung von Aktivitäten auf einem Dateideskriptor. Mehr...

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

Öffentliche Typen

enum Type { Read, Write, Exception }

Öffentliche Funktionen

(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

Öffentliche Slots

void setEnabled(bool enable)

Signale

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

Reimplementierte geschützte Funktionen

virtual bool event(QEvent *e) override

Detaillierte Beschreibung

Der QSocketNotifier ermöglicht die Integration der Ereignisschleife von Qt mit anderen Ereignisschleifen, die auf Dateideskriptoren basieren. Die Dateideskriptor-Aktion wird in der Hauptereignisschleife von Qt (QCoreApplication::exec()) erkannt.

Sobald Sie ein Gerät mit einer Low-Level-API (normalerweise plattformspezifisch) geöffnet haben, können Sie einen Socket-Notifier erstellen, um den Dateideskriptor zu überwachen. Wenn der Deskriptor an den Konstruktor des Notifizierers übergeben wird, ist der Socket-Notifizierer standardmäßig aktiviert, d.h. er gibt das Signal activated() aus, sobald ein Socket-Ereignis seines Typs eintritt. Verbinden Sie das Signal activated() mit dem Slot, der aufgerufen werden soll, wenn ein Ereignis eintritt, das dem Typ Ihres Socket Notifier entspricht.

Sie können einen Socket-Melder erstellen, dem kein Deskriptor zugewiesen ist. In diesem Fall sollten Sie die Funktion setSocket() aufrufen, nachdem Sie den Deskriptor erhalten haben.

Es gibt drei Arten von Socket-Meldern: Lese-, Schreib- und Ausnahme-Melder. Der Typ wird durch das Type enum beschrieben und muss bei der Konstruktion des Socket-Melders angegeben werden. Nach der Konstruktion kann er mit der Funktion type() ermittelt werden. Beachten Sie, dass Sie zwei Socket-Melder erstellen müssen, wenn Sie sowohl Lese- als auch Schreibvorgänge für denselben Dateideskriptor überwachen müssen. Beachten Sie auch, dass es nicht möglich ist, zwei Socket-Notifier desselben Typs (Read, Write, Exception) auf demselben Socket zu installieren.

Mit der Funktion setEnabled() können Sie den Socket-Anmelder sowohl deaktivieren als auch aktivieren. Es ist im Allgemeinen ratsam, den Socket-Melder explizit zu aktivieren oder zu deaktivieren, insbesondere bei Schreib-Meldern. Ein deaktivierter Notifier ignoriert Socket-Ereignisse (der gleiche Effekt wie das Nicht-Erstellen des Socket-Notifiers). Verwenden Sie die Funktion isEnabled(), um den aktuellen Status des Notifizierers zu ermitteln.

Schließlich können Sie die Funktion socket() verwenden, um den Socket-Bezeichner abzurufen. Obwohl die Klasse QSocketNotifier heißt, wird sie normalerweise für andere Gerätetypen als Sockets verwendet. QTcpSocket und QUdpSocket bieten Benachrichtigungen durch Signale, so dass es normalerweise nicht notwendig ist, einen QSocketNotifier für sie zu verwenden.

Siehe auch QFile, QProcess, QTcpSocket, und QUdpSocket.

Dokumentation der Mitgliedstypen

enum QSocketNotifier::Type

Diese Aufzählung beschreibt die verschiedenen Arten von Ereignissen, die ein Socket Notifier erkennen kann. Der Typ muss bei der Erstellung des Socket-Benachrichtigers angegeben werden.

Beachten Sie, dass Sie zwei Socket-Benachrichtiger erstellen müssen, wenn Sie sowohl Lese- als auch Schreibvorgänge für denselben Dateideskriptor überwachen wollen. Beachten Sie auch, dass es nicht möglich ist, zwei Socket-Benachrichtiger desselben Typs (Read, Write, Exception) auf demselben Socket zu installieren.

KonstanteWertBeschreibung
QSocketNotifier::Read0Es gibt Daten, die gelesen werden können.
QSocketNotifier::Write1Es können Daten geschrieben werden.
QSocketNotifier::Exception2Es ist eine Ausnahme aufgetreten. Wir empfehlen, dies nicht zu verwenden.

Siehe auch QSocketNotifier() und type().

Dokumentation der Mitgliedsfunktionen

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

Konstruiert einen Socket-Melder mit dem angegebenen type, dem kein Deskriptor zugewiesen ist. Das Argument parent wird an den Konstruktor von QObject übergeben.

Rufen Sie die Funktion setSocket() auf, um den Deskriptor für die Überwachung zu setzen.

Diese Funktion wurde in Qt 6.1 eingeführt.

Siehe auch setSocket(), isValid(), und isEnabled().

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

Konstruiert einen Socket-Melder mit dem angegebenen parent. Er aktiviert den socket und wartet auf Ereignisse des angegebenen type.

Es ist im Allgemeinen ratsam, den Socket-Notifier explizit zu aktivieren oder zu deaktivieren, insbesondere für Schreibnotifier.

Hinweis für Windows-Benutzer: Der an QSocketNotifier übergebene Socket wird nicht-blockierend, auch wenn er als blockierender Socket erstellt wurde.

Siehe auch setEnabled() und isEnabled().

[virtual noexcept] QSocketNotifier::~QSocketNotifier()

Zerstört diesen Socket-Melder.

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

Dieses Signal wird immer dann ausgegeben, wenn der Socket-Melder aktiviert ist und ein Socket-Ereignis eintritt, das seinem type entspricht.

Der Socket-Bezeichner wird im Parameter socket übergeben.

Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, kann aber nicht vom Benutzer ausgegeben werden.

Hinweis: Das Signal activated ist in dieser Klasse überladen. Um sich mit diesem Signal zu verbinden, indem man die Funktionszeiger-Syntax verwendet, bietet Qt einen praktischen Helfer, um den Funktionszeiger zu erhalten, wie in diesem Beispiel gezeigt:

connect(socketNotifier, QOverload<QSocketDescriptor, QSocketNotifier::Type>::of(&QSocketNotifier::activated),
    [=](QSocketDescriptor socket, QSocketNotifier::Type type){ /* ... */ });

Siehe auch type() und socket().

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

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

bool QSocketNotifier::isEnabled() const

Gibt true zurück, wenn der Melder aktiviert ist; andernfalls wird false zurückgegeben.

Siehe auch setEnabled().

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

Gibt true zurück, wenn der Notifier gültig ist (d.h. ihm ein Deskriptor zugewiesen wurde); andernfalls wird false zurückgegeben.

Diese Funktion wurde in Qt 6.1 eingeführt.

Siehe auch setSocket().

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

Wenn enable wahr ist, ist der Notifizierer aktiviert, andernfalls ist er deaktiviert.

Wenn der Notifier aktiviert ist, sendet er das Signal activated(), sobald ein Socket-Ereignis eintritt, das seinem type entspricht. Wenn er deaktiviert ist, ignoriert er Socket-Ereignisse (dies hat den gleichen Effekt, als würde der Socket-Notifier nicht erstellt).

Schreibnotifizierer sollten normalerweise sofort deaktiviert werden, nachdem das Signal activated() ausgegeben wurde.

Siehe auch isEnabled() und activated().

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

Weist die socket diesem Melder zu.

Hinweis: Der Notifier wird als Nebeneffekt deaktiviert und muss wieder aktiviert werden.

Diese Funktion wurde in Qt 6.1 eingeführt.

Siehe auch socket(), setEnabled(), und isValid().

qintptr QSocketNotifier::socket() const

Gibt die diesem Objekt zugewiesene Socket-Kennung zurück.

Siehe auch setSocket(), isValid(), und type().

QSocketNotifier::Type QSocketNotifier::type() const

Gibt den im Konstruktor angegebenen Socket-Ereignistyp zurück.

Siehe auch socket().

© 2025 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.