QSocketNotifier Class

QSocketNotifier 类支持监控文件描述符上的活动。更多

Header: #include <QSocketNotifier>
CMake.QSocketNotifier find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmake: QT += core
继承: QObject

公共类型

enum Type { Read, Write, Exception }

公共函数

(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

公共插槽

void setEnabled(bool enable)

信号

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

重新实现的保护函数

virtual bool event(QEvent *e) override

详细说明

QSocketNotifier 使 Qt 的事件循环与其他基于文件描述符的事件循环集成成为可能。文件描述符动作在 Qt 的主事件循环 (QCoreApplication::exec()) 中被检测到。

使用底层(通常是特定平台)API 打开设备后,就可以创建一个套接字通知器来监控文件描述符。如果将描述符传递给通知程序的构造函数,则默认启用套接字通知程序,即每当发生与其类型对应的套接字事件时,它就会发出 activated() 信号。将 activated() 信号连接到您希望在发生与其套接字通知符类型对应的事件时被调用的槽。

您可以创建一个未指定描述符的套接字通知符。在这种情况下,应在获得描述符后调用setSocket() 函数。

套接字通知符有三种类型:读取、写入和异常。类型由Type 枚举描述,必须在构建套接字通知符时指定。构造完成后,可以使用type() 函数确定其类型。请注意,如果需要监控同一文件描述符的读取和写入,则必须创建两个套接字通知符。还要注意的是,不能在同一个套接字上安装两个相同类型的套接字通知符(Read,Write,Exception )。

setEnabled() 函数允许您禁用或启用套接字通知符。通常建议明确启用或禁用套接字通知符,尤其是写通知符。禁用的通知程序会忽略套接字事件(与不创建套接字通知程序的效果相同)。使用isEnabled() 函数可确定通知符的当前状态。

最后,可以使用socket() 函数检索套接字标识符。虽然该类名为 QSocketNotifier,但它通常用于套接字以外的其他类型设备。QTcpSocketQUdpSocket 通过信号提供通知,因此通常无需在它们上使用 QSocketNotifier。

另请参阅 QFile,QProcess,QTcpSocket, 和QUdpSocket

成员类型文档

enum QSocketNotifier::Type

该枚举描述了套接字通知符可以识别的各种事件类型。类型必须在构建套接字通知符时指定。

请注意,如果需要监控同一文件描述符的读取和写入,则必须创建两个套接字通知符。还要注意的是,不能在同一个套接字上安装两个相同类型(读、写、异常)的套接字通知符。

常量说明
QSocketNotifier::Read0有数据可读。
QSocketNotifier::Write1可以写入数据。
QSocketNotifier::Exception2发生异常。建议不要使用。

另请参阅 QSocketNotifier() 和type()。

成员函数文档

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

使用给定的type 构建一个未分配描述符的套接字通知器。parent 参数将传递给QObject 的构造函数。

调用setSocket() 函数设置用于监控的描述符。

该函数在 Qt 6.1 中引入。

另请参阅 setSocket()、isValid() 和isEnabled()。

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

使用给定的parent 构建套接字通知器。它启用socket ,并监视给定type 的事件。

通常建议明确启用或禁用套接字通知程序,尤其是写入通知程序。

Windows 用户请注意:传给 QSocketNotifier 的套接字将变成非阻塞套接字,即使它是作为阻塞套接字创建的。

另请参阅 setEnabled() 和isEnabled()。

[virtual noexcept] QSocketNotifier::~QSocketNotifier()

销毁此套接字通知程序。

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

每当启用套接字通知器并发生与type 对应的套接字事件时,就会发出该信号。

套接字标识符通过socket 参数传递。

注意: 这是一个私有信号。可以在信号连接中使用,但用户不能发出。

注:该类重载了信号激活。要使用函数指针语法连接该信号,Qt 提供了一个方便的辅助工具来获取函数指针,如本例所示:

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

另请参阅 type() 和socket()。

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

重实现:QObject::event(QEvent *e)。

bool QSocketNotifier::isEnabled() const

如果通知程序已启用,则返回true ;否则返回false

另请参阅 setEnabled() 。

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

如果通知符有效(即已分配描述符),则返回true ;否则返回false

此函数在 Qt 6.1 中引入。

另请参阅 setSocket()。

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

如果enable 为 true,则启用通知符;否则禁用通知符。

启用通知符后,每当与type 对应的套接字事件发生时,通知符就会发出 activated() 信号。禁用时,它将忽略套接字事件(效果与不创建套接字通知符相同)。

写入通知符通常应在激活()信号发出后立即禁用。

另请参阅 isEnabled() 和activated()。

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

为该通知程序指定socket

注意: 作为副作用,通知符将被禁用,需要重新启用。

此函数在 Qt 6.1 中引入。

另请参阅 socket()、setEnabled() 和isValid()。

qintptr QSocketNotifier::socket() const

返回分配给此对象的套接字标识符。

另请参阅 setSocket()、isValid() 和type()。

QSocketNotifier::Type QSocketNotifier::type() const

返回构造函数指定的套接字事件类型。

另请参阅 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.