QSocketNotifier Class Reference

[QtCore module]

该QSocketNotifier类提供了一个文件描述符监测活动的支持。More…

继承QObject

Types

  • enum Type { Read, Write, Exception }

Methods

  • __init__ (self, int socket, Type type, QObject parent = None)
  • bool event (self, QEvent)
  • bool isEnabled (self)
  • setEnabled (self, bool)
  • int socket (self)
  • Type type (self)

Qt Signals

  • void activated (int)

Detailed Description

该QSocketNotifier类提供了一个文件描述符监测活动的支持。

该QSocketNotifier使得能够整合Qt的事件循环与基于文件描述符其他事件循环。例如,本 CORBA Framework使用它来处理CORBA的事件。在Qt的主事件循环(当检测到文件描述符行动QCoreApplication.exec())。

一旦你已经使用一个低级别(通常特定于平台)的API打开一个设备,你可以创建一个socket通知监视的文件描述符。该插座通知是默认启用的,也就是说,它发出的activated( )信号时对应其类型的套接字事件发生。连接activated()信号,要在对应的插槽通知的类型的事件发生时要调用的插槽。

有三种类型的套接字通知者的:读,写和异常。类型由所描述的Type枚举,而且必须构建插座通知时指定。项目建成后可利用装置type()函数。请注意,如果你需要同时监视读取和相同的文件描述符写入,您必须创建两个socket通知者。还请注意,这是不可能安装相同类型的两个插座通知器(ReadWriteException)在同一个插座上。

setEnabled( )函数允许你禁用和启用套接字通知。它一般最好明确地启用或禁用该插座通知器,特别是用于写通知器。停用的通知忽略套接字事件(同样的效果不是创建套接字通知) 。使用isEnabled( )函数来确定通知的当前状态。

最后,您可以使用socket( )函数来获取套接字标识符。虽然该类称为QSocketNotifier ,它通常是用于其它类型的设备比套接字。QTcpSocketQUdpSocket通过信号提供通知,所以通常没有必要对他们使用QSocketNotifier 。

Notes for Windows Users

传递给QSocketNotifier插座将成为不可阻挡,即使它被创建为一个阻塞套接字。该activated()信号是由主机上的高活性一般有时触发,即使没有要读出。然后从插座后续读取可能会失败,错误表明有可用(例如,没有数据,WSAEWOULDBLOCK) 。这是一个操作系统的限制,而不是在QSocketNotifier的错误。

为了确保插座通知句柄读通知正确,当你收到通知按照下列步骤操作:

  1. 禁用通知。
  2. 从套接字读取数据。
  3. 重新启用的通知,如果您有兴趣更多的数据(如经书面一个新的命令到远程服务器后) 。

为了确保插座通知处理正确地写通知,当你收到通知按照下列步骤操作:

  1. 禁用通知。
  2. 写入尽可能多的数据,你可以(之前EWOULDBLOCK返回) 。
  3. 重新启用通知,如果你有更多的数据来写。

Further information:在Windows下,Qt始终禁用通知得到通知后,只有重新启用它,如果更多的数据的预期。例如,如果数据是从套接字中读取,它可以被用来读取更多,或者,如果读取或写入是不可能的,因为插座会阻塞,在这种情况下,需要在尝试重新读取或写入之前的等待时间。


Type Documentation

  1. QSocketNotifier.Type

这个枚举变量描述了不同类型的套接字通知器可以识别的事件。构建插座通知时,必须指定类型。

请注意,如果你需要同时监视读取和相同的文件描述符写入,您必须创建两个socket通知者。另请注意,这是不可能安装在同一个插座上同类型(读,写,异常)的双插槽通知者。

Constant Value Description
QSocketNotifier.Read 0 有数据被读取。
QSocketNotifier.Write 1 数据可以被写入。
QSocketNotifier.Exception 2 发生异常。我们不建议使用本品。

See also QSocketNotifier()和type( ) 。


Method Documentation

  1. QSocketNotifier.__init__ (self, int socket, Type type, QObject parent = None)

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

构造一个套接字通知给定的parent。它使socket和手表给定的事件type

它一般最好明确地启用或禁用该插座通知器,特别是用于写通知器。

Note for Windows users:传递到插座QSocketNotifier将成为非阻塞的,即使它被创建为一个阻塞套接字。

See also setEnabled()和isEnabled( ) 。

  1. bool QSocketNotifier.event (self, QEvent)

从重新实现QObject.event( ) 。

  1. bool QSocketNotifier.isEnabled (self)

返回True如果通知已启用,否则返回False 。

See also setEnabled( ) 。

  1. QSocketNotifier.setEnabled (self, bool)

这种方法也是一个Qt槽与C + +的签名void setEnabled(bool)

If enable为True,则通知被启用,否则通知无效。

该通知是默认启用的,也就是说,它发出的activated( )信号时对应于插座的事件type发生。如果它被禁用,它会忽略插座事件(同样的效果不是创建套接字通知) 。

写通知者一般应后立即停用activated()信号已经发出

See also isEnabled()和activated( ) 。

  1. int QSocketNotifier.socket (self)

返回指定给构造函数的接口标识符。

See also type( ) 。

  1. Type QSocketNotifier.type (self)

[

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

]($docs-qsocketnotifier.html#Type-enum)

See also socket( ) 。


Qt Signal Documentation

  1. void activated (int)

这是该信号的默认超载。

这个信号被发射时的插座通知器被启用,并且套接字事件对应于其type发生。

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

See also type()和socket( ) 。