雷蛇云驱动键盘设置:QWSClient接受客户端程序命令

来源:百度文库 编辑:九乡新闻网 时间:2024/05/03 14:37:19

在创建QWSClient时,系统调用            QObject::connect(ad, SIGNAL(readyRead()),
                q, SLOT(_q_doClient()));把QAuthDevice(#ifndef QT_NO_SXE)的readyRead()信号和_q_doClient()函数联系到一块。而QAuthDevice在构造的时候通过            connect( m_target, SIGNAL(readyRead()),
                this, SIGNAL(readyRead()));和m_target联系到一块。m_target是相应QWSClient的QWSSocket。QWSSocket的readyRead()信号是通过QUnixSocket从QIODevice继承来的。而该信号是和QUnixSocketPrivate的readyRead()信号在QUnixSocketPrivate构造的时候联系在一起的。    QObject::connect(this, SIGNAL(readyRead()), me, SIGNAL(readyRead()))me即是相应的QUnixSocket。在    void QUnixSocketPrivate::readActivated()中会产生readyRead()信号。调用readActivated()槽函数的地方有两处,一处是    bool QUnixSocket::waitForReadyRead(int msecs),该函数调用    int rv = ::select(d->fd + 1, &readset, 0, 0, ptrTv)查询QUnixSocket的套接字,如果有数据到来,激活readActivated()。调用waitForReadyRead()函数有多处    void QWSDisplay::Data::flush()    void QWSDisplay::Data::waitForConnection()    void QWSDisplay::Data::waitForRegionAck(int winId)    void QWSDisplay::Data::waitForRegionEvents(int winId, bool ungrabDisplay)    void QWSDisplay::Data::waitForCreation()    void QWSDisplay::Data::waitForPropertyReply()    void QWSDisplay::Data::waitForQCopResponse()可以看出,这些都是用在一些需要同步通信的场合。另一处调用readActivated()的地方是        QObject::connect(d->readNotifier, SIGNAL(activated(int)),
                     d, SLOT(readActivated()));每一次消息循环都会检测所有的QSocketNotifier,如果该QSocketNotifier有变化,发出activated(int)信号,然后触发相应动作,在这里是readActivated()。 在QWSClient构造的时候会调用    connect(csocket, SIGNAL(readyRead()), this, SIGNAL(readyRead()));函数,也就是说,QWSSocket的readyRead()会连接两个槽函数。实际上,QWSClient的readyRead()的信号是在(#ifndef QT_NO_SXE)选项不成立的时候才用到的,原理和刚才说的差不多。