QSocketNotifier 类
QSocketNotifier 类提供了对文件描述符活动监视的支持。 更多信息...
头文件 | #include <QSocketNotifier> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
继承 | QObject |
- 包括继承成员在内的全部成员列表
- 废弃的成员
- QSocketNotifier 是网络编程 API 的一个部分,也是输入/输出和网络的一部分。Network Programming API 和 Input/Output and Networking.
公共类型
枚举 | Type { Read, Write, Exception } |
公共函数
(since 6.1) | QSocketNotifier(QSocketNotifier::Type type, QObject *parent = nullptr) |
QSocketNotifier(qintptr socket, QSocketNotifier::Type type, QObject *parent = nullptr) | |
虚拟 | ~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) |
重新实现的保护函数
虚拟 | event(QEvent *e) override |
详细描述
QSocketNotifier 允许将 Qt 的事件循环与其他基于文件描述符的事件循环集成。在 Qt 的主事件循环(QCoreApplication::exec()) 中检测文件描述符操作。
一旦您使用低级 API(通常是特定平台的)打开了一个设备,您就可以创建一个 socket notifier 来监视文件描述符。如果描述符被传递给 notifier 的构造函数,socket notifier 默认启用,即在与其类型对应的套接字事件发生时发出 activated() 信号。将 activated() 信号连接到在发生与您的 socket notifier 类型对应的事件时要调用的槽。
您还可以创建没有指定描述符的 socket notifier。在这种情况下,您应该在获取描述符之后调用 setSocket() 函数。
有三种类型的套接字通知器:读取、写入和异常。类型由 Type 枚举描述,并在构造套接字通知器时必须指定。构造后,可以使用 type() 函数确定类型。请注意,如果您需要监控同一文件描述符的读取和写入,您必须创建两个套接字通知器。注意,不可能在相同的套接字上安装两个同类型的套接字通知器(Read、Write、Exception)。
该 setEnabled() 函数允许您启用或禁用套接字通知器。通常建议明确启用或禁用套接字通知器,特别是对于写入通知器。禁用的通知器忽略套接字事件(等同于没有创建套接字通知器)。使用 isEnabled() 函数可确定通知器的当前状态。
最后,您可以使用 socket() 函数检索套接字标识符。尽管类名为 QSocketNotifier,但它通常用于除套接字之外的其他类型设备。 QTcpSocket 和 QUdpSocket 通过信号提供通知,因此通常不需要在这些设备上使用 QSocketNotifier。
另请参阅 QFile、QProcess、QTcpSocket 和 QUdpSocket。
成员类型文档
枚举 QSocketNotifier::Type
此枚举描述了套接字通知器可以识别的各种事件类型。在构造套接字通知器时必须指定类型。
请注意,如果需要监控同一文件描述符的读取和写入,您必须创建两个套接字通知器。另外,不可能在相同的套接字上安装两个相同类型的套接字通知器(读取、写入、异常)。
常量 | 值 | 描述 |
---|---|---|
QSocketNotifier::Read | 0 | 有可读取的数据。 |
QSocketNotifier::Write | 1 | 可以写入数据。 |
QSocketNotifier::Exception | 2 | 发生异常。我们不推荐使用此选项。 |
另请参阅 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){ /* ... */ });
[重写虚保护函数]
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()信号发出后立即禁用写通知器
[自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().
© 2024 The Qt Company Ltd. 本文档中的贡献包含各自所有者的版权。本提供的文档是根据自由软件基金会发布的GNU自由文档许可证1.3版本条款授权的。Qt和相应的标志是The Qt Company Ltd在芬兰和其他全球国家的商标。所有其他商标均为各自所有者的财产。