QSocketNotifier Class
Die Klasse „QSocketNotifier“ bietet Unterstützung für die Überwachung der Aktivitäten an einem Dateideskriptor. Mehr...
| Header: | #include <QSocketNotifier> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| Erbt von: | QObject |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- Veraltete Mitglieder
- QSocketNotifier ist Teil der Netzwerkprogrammier-API sowie der Bereiche Ein-/Ausgabe und Netzwerk.
Ö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) |
Neu implementierte geschützte Funktionen
| virtual bool | event(QEvent *e) override |
Ausführliche Beschreibung
Der QSocketNotifier ermöglicht die Integration der Qt-Ereignisschleife mit anderen, auf Dateideskriptoren basierenden Ereignisschleifen. Aktionen an Dateideskriptoren werden in der Haupt-Ereignisschleife von Qt erkannt (QCoreApplication::exec()).
Sobald Sie ein Gerät mithilfe einer Low-Level-API (in der Regel plattformspezifisch) geöffnet haben, können Sie einen Socket-Notifier erstellen, um den Dateideskriptor zu überwachen. Wird der Deskriptor an den Konstruktor des Notifiers übergeben, ist der Socket-Notifier standardmäßig aktiviert, d. h., er sendet das Signal „ activated()“ aus, sobald ein seinem Typ entsprechendes Socket-Ereignis auftritt. Verbinden Sie das Signal „ activated()“ mit dem Slot, der aufgerufen werden soll, wenn ein dem Typ Ihres Socket-Notifiers entsprechendes Ereignis auftritt.
Sie können einen Socket-Notifier ohne zugewiesenen Deskriptor erstellen. In diesem Fall sollten Sie die Funktion ` setSocket()` aufrufen, nachdem der Deskriptor abgerufen wurde.
Es gibt drei Arten von Socket-Notifiern: „read“, „write“ und „exception“. Der Typ wird durch die Enumeration ` Type ` beschrieben und muss beim Erstellen des Socket-Notifiers angegeben werden. Nach der Erstellung kann er mithilfe der Funktion ` type()` ermittelt werden. Beachten Sie, dass Sie zwei Socket-Notifier erstellen müssen, wenn Sie sowohl Lese- als auch Schreibvorgänge für denselben Dateideskriptor überwachen möchten. Beachten Sie außerdem, dass es nicht möglich ist, zwei Socket-Notifier desselben Typs (Read, Write, Exception) für denselben Socket zu installieren.
Mit der Funktion ` setEnabled()` können Sie den Socket-Notifier sowohl aktivieren als auch deaktivieren. Es ist generell ratsam, den Socket-Notifier explizit zu aktivieren oder zu deaktivieren, insbesondere bei Schreib-Notifiern. Ein deaktivierter Notifier ignoriert Socket-Ereignisse (dies hat denselben Effekt wie das Nicht-Erstellen des Socket-Notifiers). Verwenden Sie die Funktion ` isEnabled()`, um den aktuellen Status des Notifiers zu ermitteln.
Schließlich können Sie die Funktion ` socket()` verwenden, um die Socket-Kennung abzurufen. Obwohl die Klasse „QSocketNotifier“ heißt, wird sie normalerweise für andere Gerätetypen als Sockets verwendet. ` QTcpSocket ` und ` QUdpSocket ` stellen Benachrichtigungen über Signale bereit, sodass es normalerweise nicht erforderlich ist, einen `QSocketNotifier` für sie zu verwenden.
Siehe auch QFile, QProcess, QTcpSocket und QUdpSocket.
Dokumentation zu Mitgliedstypen
enum QSocketNotifier::Type
Diese Enumeration beschreibt die verschiedenen Arten von Ereignissen, die ein Socket-Notifier erkennen kann. Der Typ muss beim Erstellen des Socket-Notifiers angegeben werden.
Beachten Sie, dass Sie zwei Socket-Notifier erstellen müssen, wenn Sie sowohl Lese- als auch Schreibvorgänge für denselben Dateideskriptor überwachen möchten. Beachten Sie außerdem, dass es nicht möglich ist, zwei Socket-Notifier desselben Typs (Read, Write, Exception) auf demselben Socket zu installieren.
| Konstante | Wert | Beschreibung |
|---|---|---|
QSocketNotifier::Read | 0 | Es liegen Daten zum Lesen vor. |
QSocketNotifier::Write | 1 | Es können Daten geschrieben werden. |
QSocketNotifier::Exception | 2 | Es ist eine Ausnahme aufgetreten. Wir raten davon ab, dies zu verwenden. |
Siehe auch QSocketNotifier() und type().
Dokumentation der Mitgliedsfunktionen
[explicit, since 6.1] QSocketNotifier::QSocketNotifier(QSocketNotifier::Type type, QObject *parent = nullptr)
Erstellt einen Socket-Notifier mit dem angegebenen „ type “, dem noch 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 festzulegen.
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)
Erstellt einen Socket-Notifier mit dem angegebenen „ parent “. Er aktiviert den „ socket “ und überwacht Ereignisse des angegebenen „ type “.
Es ist generell ratsam, den Socket-Notifier explizit zu aktivieren oder zu deaktivieren, insbesondere bei Schreib-Notifiern.
Hinweis für Windows-Benutzer: Der an `QSocketNotifier` übergebene Socket wird nicht-blockierend, selbst wenn er als blockierender Socket erstellt wurde.
Siehe auch setEnabled() und isEnabled().
[virtual noexcept] QSocketNotifier::~QSocketNotifier()
Löscht diesen Socket-Notifier.
[private signal] void QSocketNotifier::activated(QSocketDescriptor socket, QSocketNotifier::Type type)
Dieses Signal wird immer dann ausgelöst, wenn der Socket-Notifier aktiviert ist und ein Socket-Ereignis auftritt, das dem Parameter „ type “ entspricht.
Die Socket-Kennung wird im Parameter „ socket “ übergeben.
Hinweis: Dies ist ein privates Signal. Es kann in Signalverbindungen verwendet werden, kann jedoch nicht vom Benutzer ausgelöst werden.
Hinweis: Dieses Signal ist überladen. Um eine Verbindung zu diesem Signal herzustellen:
// 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 */ }); Siehe auch ` type()` und ` socket()`.
[override virtual protected] bool QSocketNotifier::event(QEvent *e)
Umsetzt: ` QObject::event(QEvent *e)`.
bool QSocketNotifier::isEnabled() const
Gibt „ true “ zurück, wenn der Notifier 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 ist ein Deskriptor zugewiesen); andernfalls wird „ false “ zurückgegeben.
Diese Funktion wurde in Qt 6.1 eingeführt.
Siehe auch ` setSocket()`.
[slot] void QSocketNotifier::setEnabled(bool enable)
Ist „ enable “ wahr, ist der Notifier aktiviert; andernfalls ist er deaktiviert.
Wenn der Notifier aktiviert ist, sendet er das Signal ` activated()` aus, sobald ein Socket-Ereignis auftritt, das seiner ` type ` entspricht. Ist er deaktiviert, ignoriert er Socket-Ereignisse (dies hat denselben Effekt wie das Nichtanlegen des Socket-Notifiers).
Schreib-Notifier sollten normalerweise unmittelbar nach dem Aussenden des Signals ` activated()` deaktiviert werden
Siehe auch ` isEnabled()` und ` activated()`.
[since 6.1] void QSocketNotifier::setSocket(qintptr socket)
Weist diesem Notifier den „ socket “ zu.
Hinweis: Der Notifier wird als Nebeneffekt deaktiviert und muss erneut 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()`.
© 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.