QSocketNotifier 类

QSocketNotifier 类提供了对文件描述符活动监视的支持。 更多信息...

头文件 #include <QSocketNotifier>
CMakefind_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
qmakeQT += core
继承 QObject

公共类型

枚举Type { Read, Write, Exception }

公共函数

(since 6.1) QSocketNotifier(QSocketNotifier::Type type, QObject *parent = nullptr)
QSocketNotifier(qintptr socket, QSocketNotifier::Type type, QObject *parent = nullptr)
虚拟~QSocketNotifier()
boolisEnabled() const
(since 6.1) boolisValid() const
(since 6.1) voidsetSocket(qintptr socket)
qintptrsocket() const
QSocketNotifier::Typetype() const

公共槽函数

voidsetEnabled(bool enable)

信号

voidactivated(QSocketDescriptor socket, QSocketNotifier::Type type)

重新实现的保护函数

虚拟event(QEvent *e) override

详细描述

QSocketNotifier 允许将 Qt 的事件循环与其他基于文件描述符的事件循环集成。在 Qt 的主事件循环(QCoreApplication::exec()) 中检测文件描述符操作。

一旦您使用低级 API(通常是特定平台的)打开了一个设备,您就可以创建一个 socket notifier 来监视文件描述符。如果描述符被传递给 notifier 的构造函数,socket notifier 默认启用,即在与其类型对应的套接字事件发生时发出 activated() 信号。将 activated() 信号连接到在发生与您的 socket notifier 类型对应的事件时要调用的槽。

您还可以创建没有指定描述符的 socket notifier。在这种情况下,您应该在获取描述符之后调用 setSocket() 函数。

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

setEnabled() 函数允许您启用或禁用套接字通知器。通常建议明确启用或禁用套接字通知器,特别是对于写入通知器。禁用的通知器忽略套接字事件(等同于没有创建套接字通知器)。使用 isEnabled() 函数可确定通知器的当前状态。

最后,您可以使用 socket() 函数检索套接字标识符。尽管类名为 QSocketNotifier,但它通常用于除套接字之外的其他类型设备。 QTcpSocketQUdpSocket 通过信号提供通知,因此通常不需要在这些设备上使用 QSocketNotifier。

另请参阅 QFileQProcessQTcpSocketQUdpSocket

成员类型文档

枚举 QSocketNotifier::Type

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

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

常量描述
QSocketNotifier::Read0有可读取的数据。
QSocketNotifier::Write1可以写入数据。
QSocketNotifier::Exception2发生异常。我们不推荐使用此选项。

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

成员函数文档

[显式,自 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)

使用给定的父项构造套接字通知器。它启用套接字,并监视给定的类型的事件。

通常建议显式启用或禁用套接字通知器,尤其是对于写通知器。

注意: 对于Windows用户,传递给QSocketNotifier的套接字将变为非阻塞模式,即使它被创建为阻塞套接字。

另请参阅setEnabled()和isEnabled

[虚函数 noexcept] QSocketNotifier::~QSocketNotifier()

销毁此套接字通知器。

[私有信号] void QSocketNotifier::activated(QSocketDescriptor socket, QSocketNotifier::Type type)

每当套接字通知器被启用且发生与其类型对应的套接字事件时,都会发出此信号。

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

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

注意: 在此类中重载了信号activated。为了使用函数指针语法连接到此信号,Qt提供了一个方便的帮助器来获取函数指针,如示例所示

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

另请参阅type()和socket

[重写虚保护函数] bool QSocketNotifier::event(QEvent *e)

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

bool QSocketNotifier::isEnabled() const

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

另请参阅setEnabled

[自6.1起] bool QSocketNotifier::isValid() const

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

此函数是在 Qt 6.1 中引入的。

另请参阅setSocket

[槽函数] void QSocketNotifier::setEnabled(bool enable)

如果enable为真,通知器被启用;否则通知器被禁用。

当通知器被启用时,每当发生与其类型对应的套接字事件,它就发出activated()信号。当它被禁用时,它忽略套接字事件(与未创建套接字通知器相同的效果)。

应该在activated()信号发出后立即禁用写通知器

另请参阅isEnabled()和activated

[自6.1起] void QSocketNotifier::setSocket(qintptr socket)

socket分配给此通知器。

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

此函数是在 Qt 6.1 中引入的。

另请参阅socketsetEnabledisValid

qintptr QSocketNotifier::socket() const

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

另请参阅setSocket(), isValid() 和 type().

QSocketNotifier::Type QSocketNotifier::type() const

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

另请参阅socket().

© 2024 The Qt Company Ltd. 本文档中的贡献包含各自所有者的版权。本提供的文档是根据自由软件基金会发布的GNU自由文档许可证1.3版本条款授权的。Qt和相应的标志是The Qt Company Ltd在芬兰和其他全球国家的商标。所有其他商标均为各自所有者的财产。