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 |
- Liste aller Mitglieder, einschließlich geerbter Mitglieder
- Ausgeschiedene Mitglieder
- QSocketNotifier ist Teil von Network Programming API und Input/Output and Networking.
Ö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.
Konstante | Wert | Beschreibung |
---|---|---|
QSocketNotifier::Read | 0 | Es gibt Daten, die gelesen werden können. |
QSocketNotifier::Write | 1 | Es können Daten geschrieben werden. |
QSocketNotifier::Exception | 2 | Es 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.